簡體   English   中英

如何理解內存中的常量變量。 C ++

[英]How can understand a constant variable in memory. C++

如果我有一個常量變量,它是否存儲在非常量變量的單獨存儲空間中? 我在這個節目中遇到了一些奇怪的事。

    //--------assign a const value to non-const value-------
const int cst_a = 5;
int* ptra = const_cast<int*>(&cst_a);

cout<<&cst_a<<" "<<ptra<<endl; // same address

*ptra = 6;

cout<<*ptra<<" "<<cst_a<<endl; // same address with different value

//--------assign a non-const value to const value-------

int b = 50;
const int* cst_ptr_b = &b;

cout<<cst_ptr_b<<" "<<&b<<endl; // also same address

b = 55;
cout<<b<<" "<<*cst_ptr_b<<endl; // same address with same value

return 0;

在第一種情況下,&cst_a和ptra具有相同的內存地址,但它們的值可以單獨更改。 在第二種情況下,cst_ptr_b和&b也是相同的地址,但它們的值會對稱地改變。 為什么?

它可以存儲在無法修改的存儲區中。 因此,您的const_cast導致未定義的行為。

恭喜, *ptra = 6; 是未定義的行為。 :)
不允許寫入常量值,而不是通過指針,而不是通過引用。 這是因為常量對象可能(並且很可能會)被放入常量內存區域。

它取決於您在常量中存儲的值。

const int c = 5; // This will be stored in read only area

嘗試修改只讀區域是Undefined Behavior(您使用const_cast在代碼中完成)

其他情況是,

int i = 5;
const int c = i;  // This is stored in normal read/write memory segment

問題是在示例#1中發生的顯式類型轉換。 C ++讓你這樣做,因為const int *和int *是不同的類型以及編譯器自由選擇將常量存儲在可寫或不可寫的內存中會產生這種未定義的行為,如前面的帖子所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM