2010-10-20 6 views
1

Supposons que je définir une fonction en C++ comme suit:Mot clé Const ajouté à la fin d'une définition de fonction ... que fait-il?

void foo(int &x) const { 
    x = x+10; 
} 

Et si je l'appelle comme suit:

int x = 5; 
foo(x); 

maintenant généralement (sans le mot-clé const), cela changerait avec succès la valeur de x du point de vue de l'appelant puisque la variable est passée par référence. Est-ce que le mot-clé const change cela? (C.-à-Du point de vue de l'appelant, est la valeur de x maintenant 15?)

Je suppose que je suis confus quant à ce que le mot-clé const fait quand elle est ajoutée à la fin d'une définition de fonction ... toute aide est apprécié.

+0

Votre exemple est incomplet, car le qualificatif 'const' ne peut être appliqué qu'aux fonctions de membre de la classe. –

Répondre

10

Cela ne fonctionnera pas. Vous pouvez uniquement qualifier cons-une fonction membre, et non une fonction non membre ordinaire. Pour une fonction membre, cela signifie que le paramètre this implicite est const-qualifié. Vous ne pouvez donc appeler aucune fonction membre non qualifiée ou modifier les membres de données non modifiables de l'instance de classe sur laquelle la fonction La fonction de membre a été appelée.

+0

Est-ce que cela fait essentiellement de 'this' une constante dans la méthode? Ou y a-t-il plus? – dfetter88

+1

@ dfetter88: C'est exactement ce que ça fait. Dans une fonction membre qui n'est pas qualifiée const, 'this' est de type' T * '. Dans une fonction membre qualifiée const, 'this' est de type' const T * '. –

+1

@defetter: Il n'y a rien de plus dans votre exemple particulier, car il est mal formé. S'il s'agissait d'une fonction membre de la forme 'R function (Args) cv', le type' this' est 'cv class_type *'. Avez-vous un [livre C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)? – GManNickG