Envoyé par
babar63
Pour moi le const est utilisé pour associer une propriété à une donnée et non comme un moyen plus sûr, il permet une meilleur lecture du code, (d'ailleurs si je ne me trompe pas le compilateur apprécie aussi
) ... Mais ça c'est une question de point de vue je suppose
Je crois que tu te trompes sur le sens qu'on peut associer à un paramètre référence constante ou pointeur constant :
void f (const std::string &s); // s n'est pas modifié
C'est ce que tu comprends?
(Note : bien sûr, c'est une promesse morale. Avec const_cast, derrière, la fonction peut faire ce qu'elle veut. Ça n'est pas la question ici : je considère la promesse implicite d'écrire const dans un prototype.)
Précisons ce que "pas modifié" veut dire : soit l'appel
1 2
| // string x; // x est une chaine, déclarée quelque part
f (x); // ne modifie pas x |
On veut dire que x a la même valeur après qu'avant (Hoare es-tu là?) :
1 2 3
| string __old_x = x; // on ajoute une variable imaginaire __old_x
f (x); // ne modifie pas x
assert (x == __old_x); |
Toujours d'accord?
Et bien non, const n'est pas du tout supposé servir à ça!
Peux-tu donner un exemple de f qui ne tient pas cette "promesse" illusoire?
Partager