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
Libérer: 2024-12-20 18:58:10
original
715 Les gens l'ont consulté

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;
}
Copier après la connexion

Sortie

22      0x22ff74

33      0x22ff74
Copier après la connexion

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;
Copier après la connexion

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!

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