Maison > développement back-end > C++ > le corps du texte

Pourquoi la modification d'une variable « const » via un pointeur non-const semble-t-elle fonctionner, mais ne change-t-elle pas réellement sa valeur ?

Mary-Kate Olsen
Libérer: 2024-10-28 08:35:02
original
203 Les gens l'ont consulté

Why Does Modifying a `const` Variable Through a Non-Const Pointer Seem to Work, but Doesn't Actually Change Its Value?

Modifier une const via un pointeur non-const

En C , une variable const ne peut pas être modifiée une fois initialisée. Cependant, dans certains scénarios, il peut sembler qu'une variable const ait été modifiée. Considérez le code suivant :

<code class="cpp">const int e = 2;

int* w = (int*)&e;        // (1)
*w = 5;                   // (2)

cout << *w << endl;          // (3)
cout << e << endl;             // (4)</code>
Copier après la connexion

Si vous exécutez ce code, vous remarquerez un comportement inattendu :

5
2
Copier après la connexion

Même si *w a été modifié en 5 dans (2), e conserve toujours sa valeur d'origine de 2. Ce comportement apparemment paradoxal provient des facteurs suivants :

  • (1) Le déréférencement d'un pointeur const (w) permet une modification.
  • (2 ) La valeur modifiée est stockée dans l'emplacement mémoire pointé par w, qui dans ce cas est l'emplacement mémoire où e est stocké.
  • Cependant, le compilateur optimise le code, traitant e comme une constante de compilation. et ne pas l'évaluer au moment de l'exécution.

Par conséquent, lorsque *w est évalué au moment de l'exécution, il renvoie la valeur modifiée (5). Cependant, lorsque e est évalué au moment de la compilation, sa valeur d'origine (2) est utilisée.

Ce comportement est connu sous le nom de comportement non défini en C . La modification d'une variable const entraîne directement ou indirectement des conséquences imprévisibles, et la prudence doit être exercée dans de telles situations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal