Maison >développement back-end >C++ >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 ?
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>
Si vous exécutez ce code, vous remarquerez un comportement inattendu :
5 2
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 :
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!