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

Pourquoi la modification d'une valeur « const » via un pointeur non const conduit-elle à un comportement indéfini mais imprime-t-elle toujours des valeurs différentes pour le pointeur et la variable d'origine ?

Barbara Streisand
Libérer: 2024-10-28 04:47:02
original
226 Les gens l'ont consulté

Why does modifying a `const` value through a non-const pointer lead to undefined behavior but still print different values for the pointer and the original variable?

Modifier un const via un pointeur non-const

Considérez le code suivant :

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

int* w = (int*) &e;          // (1) cast to remove const-ness
*w = 5;                        // (2)

cout << *w << endl;            // (3) outputs 5
cout << e << endl;             // (4) outputs 2

cout << "w = " << w << endl;   // (5) w points to the address of e
cout << "&e = " << &e << endl;</code>
Copier après la connexion

In (1 ), w pointe vers l’adresse de e. Dans (2), cette valeur est remplacée par 5. Cependant, lorsque les valeurs de *w et e sont affichées, leurs valeurs sont différentes. Mais si vous imprimez le pointeur w et l'adresse de e, ils ont la même valeur.

Comment se fait-il que e contienne toujours 2, même s'il a été changé en 5 ? Étaient-ils stockés dans un endroit séparé ? Ou un temporaire ? Mais comment se fait-il que la valeur pointée par w soit toujours l'adresse de e ?

Réponse

Une fois que vous modifiez une valeur const, vous entrez dans un territoire de comportement indéfini. Cependant, pour spéculer :

  • (3) et (4) : *w est évalué au moment de l'exécution, tandis que e est traité comme une constante de compilation. D'où les différentes valeurs imprimées.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!