Dans la première, vous avez promis le compilateur, mais pas les autres utilisateurs de la classe que vous ne modifierez pas la variable.
Dans votre deuxième exemple, vous avez promis d'autres utilisateurs de la classe que vous ne modifieront pas leur variable, mais n'a pas respecté cette promesse.
Il faut aussi noter qu'il ya une nette différence entre
bar* const variable
et
const bar* variable
et
const bar* const variable
Dans la première forme, le pointeur ne changera jamais, mais vous pouvez éditer l'objet pointé. Dans la deuxième forme, vous pouvez éditer le pointeur (pointer vers un autre objet), mais jamais la variable vers laquelle il pointe. Dans la forme finale, vous ne modifierez pas le pointeur, ni l'objet vers lequel il pointe. Reference
Pour ajouter un peu plus d'une précision à la question posée, vous pouvez toujours promettre plus que moins const. Étant donné une classe:
class Foo {
void func1 (int x);
void func2 (int *x);
}
Vous pouvez compiler la mise en œuvre suivante:
Foo::func1(const int x) {}
Foo::func2(const int *x) {}
ou:
Foo::func1(const int x) {}
Foo::func2(const int* const x) {}
sans aucun problème. Vous avez indiqué à vos utilisateurs que vous pouvez éventuellement modifier leurs variables. Dans votre implémentation, vous avez dit au compilateur que cette implémentation particulière n'éditerait pas ces variables, même si cela était indiqué aux utilisateurs. Vous n'avez pas rompu une promesse à l'utilisateur, et donc le code compile.
Voulez-vous dire mettre le const de l'autre côté du * dans votre deuxième exemple? Certaines personnes répondent en expliquant la différence dans la signification de cela, et d'autres répondent en expliquant la différence dans le fait que le const est dans le fichier cpp ou le fichier h. –
Vous devriez choisir une aswer à votre question ou mettre à jour si ce n'est pas la réponse que vous cherchez. –