ホームページ >バックエンド開発 >C++ >「const」変数のメモリアドレスを変更すると異なる値が表示されるのはなぜですか?

「const」変数のメモリアドレスを変更すると異なる値が表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 18:58:10749ブラウズ

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

変数と定数によるメモリ アドレスの動作を理解する

const 変数とそのポインターを含むコード スニペットでは、異なる同じメモリアドレスの値が発生する質問。

コード分析

#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;
}

出力

22      0x22ff74

33      0x22ff74

質問

なぜ2 つの異なる値 (22 と 33) を同時に観察しますメモリ アドレス (0x22ff74)?

答え

観察に反して、同じメモリ アドレスに 2 つの異なる値が格納されているわけではありません。これはコンパイラの最適化の結果です。

コンパイラには、const 変数への言及を、その変数のコンパイル時の値が直接使用されているかのように扱う権限があります。このコードでは、コンパイラはコードを次のように表示します。

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

コンパイラは、この最適化を適用する権限を持っています。ただし、コンパイラはこのアクションに限定されないことに注意することが重要です。 const 変数に関連付けられたメモリの変更などの危険な行為を行った場合、ハード ドライブ上のデータが消去される可能性があるものなど、他の最適化が採用される場合があります。

以上が「const」変数のメモリアドレスを変更すると異なる値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。