Maison >développement back-end >C++ >Pourquoi la modification de l'adresse mémoire d'une variable « const » affiche-t-elle des valeurs différentes ?

Pourquoi la modification de l'adresse mémoire d'une variable « const » affiche-t-elle des valeurs différentes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-20 18:58:10673parcourir

Why Does Modifying a `const` Variable's Memory Address Show Different Values?

Comprendre le comportement des adresses mémoire avec des variables et des constantes

Dans un extrait de code impliquant une variable const et un pointeur vers celle-ci, l'observation de différents les valeurs à la même adresse mémoire soulèvent des questions.

Code Analyse

#include <iostream>
using namespace std;

int main() {
    const int N = 22;
    int * pN = const_cast<int*>(&N);
    *pN = 33;
    cout << N << '\t' << &N << endl;
    cout << *pN << '\t' << pN << endl;
}

Sortie

22      0x22ff74

33      0x22ff74

Question

Pourquoi observer deux valeurs différentes (22 et 33) à la même adresse mémoire (0x22ff74) ?

Answer

Contrairement au constat, il n'y a pas deux valeurs différentes stockées à la même adresse mémoire. Ceci est le résultat des optimisations du compilateur.

Le compilateur a le pouvoir de traiter toute mention d'une variable const comme si la valeur de la variable au moment de la compilation était utilisée directement. Dans ce code, le compilateur considère le code comme :

int * pN = const_cast<int*>(&22);
*pN = 33;

Le compilateur a le droit d'appliquer cette optimisation. Cependant, il est important de noter que le compilateur ne se limite pas à cette action. Il peut utiliser d'autres optimisations, y compris celles qui pourraient potentiellement effacer les données de votre disque dur si vous vous engagez dans des pratiques risquées telles que la modification de la mémoire associée aux variables const.

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:
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