Presque toutes les autres réponses sont correctes, mais elles manquent un aspect de ceci: lorsque vous utilisez le supplément const
sur un paramètre dans une déclaration de fonction, le compilateur l'ignorera essentiellement. Pendant un moment, ignorons la complexité de votre exemple étant un pointeur et utilisons simplement un int
.
void foo(const int x);
déclare la même fonction que
void foo(int x);
Ce n'est que dans la définition de la fonction que le supplément est const
significatif:
void foo(const int x) {
// do something with x here, but you cannot change it
}
Cette définition est compatible avec l'une ou l'autre des déclarations ci-dessus. L'appelant ne se soucie pas que ce x
soitconst
--Que est un détail de mise en œuvre qui ne sont pas pertinentes sur le site d'appel.
Si vous avez un const
pointeur vers des const
données, les mêmes règles s'appliquent:
// these declarations are equivalent
void print_string(const char * const the_string);
void print_string(const char * the_string);
// In this definition, you cannot change the value of the pointer within the
// body of the function. It's essentially a const local variable.
void print_string(const char * const the_string) {
cout << the_string << endl;
the_string = nullptr; // COMPILER ERROR HERE
}
// In this definition, you can change the value of the pointer (but you
// still can't change the data it's pointed to). And even if you change
// the_string, that has no effect outside this function.
void print_string(const char * the_string) {
cout << the_string << endl;
the_string = nullptr; // OK, but not observable outside this func
}
Peu de programmeurs C ++ se donnent la peine de créer des paramètres const
, même lorsqu'ils pourraient l'être, que ces paramètres soient ou non des pointeurs.