Une "fonction const", indiquée par le mot-clé const
après une déclaration de fonction, en fait une erreur de compilation pour cette fonction de classe afin de changer une variable membre de la classe. Cependant, la lecture d'une variable de classe est ok à l'intérieur de la fonction, mais écrire à l'intérieur de cette fonction va générer une erreur de compilation. Une autre façon de penser à une telle "fonction const" est de voir une fonction de classe comme une fonction normale prenant un pointeur implicite this
. Donc, une méthode int Foo::Bar(int random_arg)
(sans le const à la fin) aboutit à une fonction comme int Foo_Bar(Foo* this, int random_arg)
, et un appel tel que Foo f; f.Bar(4)
correspondra intérieurement à quelque chose comme Foo f; Foo_Bar(&f, 4)
. Ajoutant maintenant le const à la fin (int Foo::Bar(int random_arg) const
) peut alors être compris comme une déclaration avec un const ce pointeur: int Foo_Bar(const Foo* this, int random_arg)
. Puisque le type de this
dans un tel cas est const, aucune modification des variables membres n'est possible.
Il est possible de desserrer la restriction "const function" de ne pas permettre à la fonction d'écrire dans une variable d'une classe. Pour permettre l'écriture de certaines variables même lorsque la fonction est marquée comme une "fonction const", ces variables de classe sont marquées du mot-clé mutable
. Ainsi, si une variable de classe est marquée comme mutable, et qu'une «fonction const» écrit dans cette variable, le code compilera proprement et la variable pourra être modifiée. (C++ 11)
Comme d'habitude lorsqu'il s'agit du mot-clé const
, la modification de l'emplacement du mot-clé const dans une instruction C++ a des significations totalement différentes. L'utilisation ci-dessus de const
s'applique uniquement lorsque vous ajoutez const
à la fin de la déclaration de fonction après la parenthèse. const
est un qualificateur fortement surutilisé en C++ et la syntaxe et l'ordre n'est souvent pas simple en combinaison avec des pointeurs. Quelques lectures sur const
exactitude et le mot-clé const
:
Const correctness
The C++ 'const' Declaration: Why & How
Duplication de http://stackoverflow.com/questions/751681/meaning-of-const-last-in-ac-method-declaration –
Elle change le type de 'this' de' Foo * const' en 'const Foo * const'. Cela a des conséquences. – sbi
Je ne comprends pas votre édition. Que veux-tu savoir exactement? Si déclarer deux variables de type Foo créera plusieurs instances de Barre de fonctions? –