3 votes

Pointeur C++ vers const

Pourquoi 1 est une erreur et 2 est légal.

Ce code est tiré de C++ primer 5th edition, il n'y a pas beaucoup de détails à ce sujet [Edit : Ceci n'est pas une question dupliquée, la soi-disant question originale est très générique].

const double pi = 3.14;
const double *cptr = π
*cptr = 42;   // 1
double dval = 3.14;
cptr = &dval;  // 2

4voto

DSC Points 88

cptr est un pointeur sur un double constant. Initialement, il pointe sur le double constant pi. *cptr = 42; tentera de modifier la valeur de pi. Cependant, comme pi est une valeur constante, elle ne peut pas être modifiée.

cptr = &dval; modifie la valeur de cptr, qui contient désormais l'adresse de val. Ceci est autorisé puisque cptr n'est pas un pointeur constant.

0voto

ruohola Points 15945

Porque cptr est un pointeur sur une constante double .

Lorsque l'on fait *cptr = 42; vous essayez de modifier la variable, qui cptr vous essayez donc de modifier la valeur de pi qui est une constante.

Lorsque vous le faites cptr = &dval; vous réaffectez le pointeur pour qu'il pointe sur une chose complètement nouvelle, ce qui est très bien, puisque cptr n'est pas un const pointeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X