Sens de 'const' dernier, dans une déclaration de fonction d'une classe?
Quel est le sens de const
dans des déclarations comme celle-ci? Le const
me confond.
class foobar
{
public:
operator int () const;
const char* foo() const;
};
Vous devez vous connecter pour publier un commentaire.
Lorsque vous ajoutez le
const
mot-clé à une méthode de lathis
pointeur un pointeur versconst
objet, et vous ne pouvez donc pas modifier toutes les données membres. (Sauf si vous utilisezmutable
, plus sur cela plus tard).La
const
mot-clé est une partie des fonctions de signature qui signifie que vous pouvez mettre en œuvre deux méthodes similaires, celle qui est appelée lorsque l'objet estconst
, et une qui ne l'est pas.Ce sera de sortie
Dans le non-const méthode, vous pouvez changer les membres de l'instance, vous ne pouvez pas faire dans la
const
version. Si vous modifiez la déclaration de la méthode dans l'exemple ci-dessus le code ci-dessous, vous obtiendrez des erreurs.Ce n'est pas tout à fait vrai, parce que vous pouvez marquer un membre
mutable
et unconst
méthode peut ensuite le modifier. Il est surtout utilisé pour les internes de compteurs et d'autres choses. La solution serait le code ci-dessous.qui serait sortie de
Const signifie que la méthode promet de ne pas modifier les membres de la classe. Vous seriez en mesure d'exécuter les membres de l'objet qui sont ainsi marquées, même si l'objet lui-même ont été marqués
const
:serait légale.
Voir Combien et quelles sont les utilisations de “const en C++? pour plus d'informations.
La
const
qualificatif signifie que les méthodes peuvent être appelées sur n'importe quelle valeur defoobar
. La différence vient quand vous pensez à téléphoner à un non-const méthode sur un const objet. Considérez si votrefoobar
type était le suivant supplémentaire de déclaration de méthode:La méthode
bar()
est non-const et ne peut être consulté à partir de la non-const valeurs.L'idée derrière
const
si c'est pour marquer des méthodes qui ne modifient pas l'état interne de la classe. C'est un concept puissant mais n'est pas réellement de la force exécutoire dans C++. C'est plus une promesse de garantie. Et qui est souvent brisé et cassé facilement.const
si c'est pour marquer des méthodes qui ne modifient pas l'état interne de la classe". C'est vraiment ce que je cherchais.const
?Ces const signifie que le compilateur générera une Erreur si la méthode 'avec const" modifie les données internes.
Le test
Lire cette pour plus d'informations
const
fonctions de membre qui ne fait pas mention mutable est incomplète au mieux.Blair réponse est sur la marque.
Cependant noter qu'il y a un
mutable
qualificatif qui peut être ajouté à une classe de données des membres. Tout membre ainsi marquée peut être modifié dans unconst
méthode sans violer leconst
contrat.Vous souhaitez utiliser (par exemple) si vous voulez un objet de se rappeler combien de fois une méthode est appelée, tout en n'affectant pas la "logique" constness de cette méthode.
Sens d'une Fonction Membre Const dans C++ Commun De Connaissances: Intermédiaire Essentiel De La Programmation donne une explication claire:
Dans votre code:
Vous pouvez le penser comme ceci:
this
n'est pasconst
. La raison pourquoi il ne peut pas être modifié, c'est que c'est un prvalue.lorsque vous utilisez
const
dans la signature de la méthode (comme elle dit:const char* foo() const;
) vous dire au compilateur que la mémoire pointé parthis
ne peut pas être modifié par cette méthode (qui estfoo
ici).Je voudrais ajouter le point suivant.
Vous pouvez également faire un
const &
etconst &&
Donc,
N'hésitez pas à améliorer la réponse. Je ne suis pas un expert
*this
est toujours une lvalue, même si la fonction de membre est rvalue-ref-qualifiés et est appelée sur une rvalue. Exemple.