Maison > développement back-end > C++ > Pourquoi une variable constante modifiée conserve-t-elle sa valeur d'origine au moment de la compilation, même si un pointeur non const permet de modifier sa valeur réelle ?

Pourquoi une variable constante modifiée conserve-t-elle sa valeur d'origine au moment de la compilation, même si un pointeur non const permet de modifier sa valeur réelle ?

Mary-Kate Olsen
Libérer: 2024-11-01 19:33:02
original
643 Les gens l'ont consulté

Why does a modified constant variable retain its original value at compile time, even though a non-const pointer allows for modification of its actual value?

Modification d'une constante via un pointeur non-const

Dans le code donné, une variable constante e est initialisée à 2. Un non- le pointeur const w est ensuite converti pour pointer vers l'adresse de e, supprimant implicitement la constance de la variable. En déréférençant w et en lui attribuant une nouvelle valeur, la valeur à l'adresse de e est modifiée de 2 à 5.

Cependant, lorsque les valeurs de *w et e sont imprimées, elles apparaissent différentes :

<code class="cpp">cout << *w << endl; // Outputs 5
cout << e << endl; // Outputs 2</code>
Copier après la connexion

Ce comportement peut être expliqué en considérant les différentes manières dont *w et e sont évalués :

  • *w est évalué au moment de l'exécution : Le le compilateur reconnaît que *w est un pointeur non const et récupère dynamiquement la valeur à l'adresse pointée par w. Puisque la valeur à cette adresse a été modifiée à 5, *w génère correctement 5.
  • e est traité comme une constante de compilation : Le compilateur reconnaît que e est une variable constante et évalue sa valeur au moment de la compilation. Puisque la valeur de e n'a pas été modifiée au moment de la compilation, le compilateur continue de la traiter comme 2.

Par conséquent, la différence de valeurs provient des temps d'évaluation distincts de *w et e. Malgré la modification de la valeur à l'adresse de e, la variable constante elle-même reste inchangée au moment de la compilation. Cependant, le pointeur non const w permet de modifier la valeur à l'adresse vers laquelle il pointe, ce qui entraîne la sortie de 5 pour *w.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal