Éditer
Comme MM l'a commenté, sur les paramètres des prototypes, le const
est ignoré. La source éditée de la réponse originale (voir ci-dessous) montre ceci:
float correct(float const value);
float erroneous(float const value);
float changer(float value);
float correct(float value) {
return -value;
}
float erroneous(float value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Il n'y a aucun message d'erreur.
Quoi qu'il en soit, je vais laisser l'original en place dans l'espoir que cela puisse aider.
Original
Le const
paramètre at a rend ce paramètre en lecture seule à l'intérieur de la fonction.
Par exemple:
float correct(float const value) {
return -value;
}
float erroneous(float const value) {
value = -value;
return value;
}
float changer(float value) {
value = -value;
return value;
}
Cette source ne se compilera pas sans message d'erreur.
La fonction correct()
lira la valeur donnée, changera son signe et renverra la valeur négative.
La fonction erroneous()
semble faire la même chose, sauf qu'il y a une affectation au paramètre. Mais comme le paramètre est, const
ce n'est pas autorisé.
Ensuite, la fonction changer()
fonctionnera comme les deux avant, mais elle ne donne aucune erreur.
Regardons le site de l'appel:
float f = 3.14159;
float g = correct(f); // or erroneous(f) or changer(f)
La variable f
donnée en argument sera copiée dans le paramètre value
. Il ne changera jamais même s'il changer()
sera appelé.
Vous voudrez peut-être regarder les paramètres comme une sorte de variables locales. En fait, ils sont principalement traités comme cela dans le code machine généré.
Alors, pourquoi voyez-vous const
parfois? Vous le voyez si un pointeur est défini comme paramètre.
Lorsque vous ne voulez pas que la valeur pointée soit modifiée, vous devez ajouter const
; mais faites-le à la bonne position!
void effective(int const * pointer);
void futile(int * const pointer);
void possible_but_overly_restricted(int const * const pointer);
const
est redondant ici, que pensez-vous qu'il se passe?