為什麼可以通過指標修改 const 變數?

時間 2021-05-31 22:17:10

1樓:

這種問題可以自己除錯一下,看看反彙編

雖然無法得到「未定義行為」「編譯檢查執行時檢查」這種高度概括的答案,但至少能讓你得到乙個直觀的認識。之後,你的問題不再是「為什麼是這個結果」,而變成「編譯器為什麼這麼設計」,進而很自然地了解到有些行為是未定義的等等等等。

2樓:時冰藍

指標還能改private呢,private const這類玩意不是用來讓你做得更拽,只是為了防豬隊友而已。

另外我最不喜歡的關鍵字就是const.

3樓:王想想

const是語言特性,不能通過const修飾的名稱去修改對應的內容,但是並不是不能修改。因為編譯器實現的時候,並沒有規定要放到唯讀區。舉個例子:

int a = 5;

const int* b = &a;

此時不能通過b修改位址&a中的值,但是依舊可以把a重新賦值。位址&a中存放的值就改變了。

4樓:陳偉

第一次的輸出是因為編譯器把常量a的值放在了暫存器裡面,其實際記憶體中的值已經被修改過了。所以在定義時加上volatile宣告就能看到效果了。

5樓:

在C++中,const實現機制是對內建型別直接用定義時的常量替換const引用,而其他型別則從記憶體中讀取。所以a直接被替換成定義時的常量10,*p則是從記憶體中讀取的修改值。

6樓:魯哈花

編譯器就是這樣編譯的,cout<

這預期說是優化,不如說是規則。關閉優化選項依然會有此結果。

const_cast是去掉const屬性,但不代表是允許修改的,可以理解為僅僅是為了允許讓非常量的指標指向乙個常量。

如果將const int a=10;的定義改為全域性定義,程式就崩潰了。

7樓:

目測編譯器對 const 做了些奇怪的優化..

把5,6行改成

const volatile int a=10;

const volatile int *p=&a;

就跑出正常結果了.

為什麼通過網絡卡屬性頁面修改mac位址後仍能上網?

1 在wndows系統的網絡卡選項頁中改的mac位址,只儲存在當前系統中,而不是網絡卡韌體中,這樣只有當前系統承認這個mac位址。換個系統,沒儲存這個修改的mac資訊,就只能顯示網絡卡韌體中的mac了。2 改了mac還可以上網,是因為你連線的ISP服務商沒有對mac位址做過濾,允許任何mac位址通過...

通過改裝可以修改變速箱換擋邏輯嗎?

小白 首先,通過改裝可以改變變速箱的換擋邏輯。但是,全國才有幾家專業調教匹配變速箱的?絕大多數重新匹配之後都不如原廠,而且越弄越糟。另外,原廠變速箱是根據自己的匹配資料選擇的零部件,根本不能支援你重新匹配後的激烈駕駛,如果你想,直接換一套好變速箱就行了,反正買變速箱,人家負責匹配。 Sun Sin ...

夏令時為什麼通過修改當前時間來實現,而不是簡單地調整一下作息時間?

est 看了這麼多回答,我算是明白了。很顯然有些人接受了雷打不動 6 00AM 起床這個設定。至於冬天這個時候起來太早了天是黑的怎麼辦?改時間。 此中劍無涯 改夏令時和調整作息時間表完全不一樣!因為前者可以節能,後者只能調整工作時間。舉個例子 小明習慣晚上23點睡覺。冬天的時候,18點天就黑了。那麼...