Qu'est-ce que l'utilisation de const surcharge en C++?
En C++, une fonction de signature dépend, en partie, sur qu'il soit ou non const. Cela signifie qu'une classe peut avoir deux fonctions de membre avec des signatures identiques, sauf que l'un est const et l'autre ne l'est pas. Si vous avez une classe comme ça, alors le compilateur décidera de la fonction d'appel en fonction de l'objet que vous l'appelez sur: si c'est un const instance de la classe, de la const version de la fonction sera appelé; si l'objet n'est pas const, l'autre version sera appelée.
Dans quelles circonstances vous voulez profiter de cette fonctionnalité?
Vous devez vous connecter pour publier un commentaire.
Ce vraiment n'a de sens que lorsque le membre de la fonction retourne un pointeur ou une référence à un membre de données de votre classe (ou un membre d'un membre ou d'un membre de membre de membre, etc...). Généralement, de retour de non-const pointeurs ou des références à des membres de données est mal vu, mais il est parfois raisonnable, ou tout simplement très pratique (par exemple, opérateur []). Dans de tels cas, vous devez fournir un const et non const versions de la lecture. De cette façon, la décision de savoir si ou non l'objet peut être modifié incombe à la fonction à l'aide de ce, qui a le choix de le déclarer const ou non-const.
Il est là pour que vous puissiez faire le compilateur appliquer si vous retournez un const objet ou régulier, et toujours conserver la même signature de la méthode. Il y a une explication en profondeur à Const Correctness.
Vous pourriez l'utiliser pour décider si ou de ne pas revenir const référence à un objet ou non. La STL conteneurs utilisation const surchargé begin() et end() la fonction de décider de renvoyer un const_iterator ou un normal itérateur.
Avoir un regard sur le comportement de std::map::operator[]. La version const renvoie une erreur si vous essayez de faire référence à une clé non valide, mais le non-const version ne un insert. L'insertion de comportement est beaucoup plus maniable que d'avoir à utiliser des std::map::insert (et va faire un écrasement, d'ailleurs), mais ne peut pas travailler pour un const carte.