首頁 >後端開發 >C++ >為什麼修改`const`變數的記憶體位址顯示不同的值?

為什麼修改`const`變數的記憶體位址顯示不同的值?

Barbara Streisand
Barbara Streisand原創
2024-12-20 18:58:10728瀏覽

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

問題

我們為什麼觀察同一記憶體位址處的兩個不同值(22 和33) (0x22ff74)?

答案

與觀察相反,同一記憶體位址不存在兩個不同的值。這是編譯器最佳化的結果。

編譯器有權將任何提及 const 變數的行為視為直接使用該變數的編譯時值。在此程式碼中,編譯器將程式碼視為:

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

編譯器有權套用此最佳化。但是,需要注意的是,編譯器並不限於此操作。它可能會採用其他最佳化,包括如果您進行修改與 const 變數相關的記憶體等危險行為,則可能會刪除硬碟上的資料。

以上是為什麼修改`const`變數的記憶體位址顯示不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn