const修飾的常量 不能被直接修改 但是可以通過指針進行間接修改


大家都知道如下代碼中,被const限定的a是不可以被直接修改的
void main()
{          
          const int a = 3;
           a=1;
}

  在C++中const修飾的常量,不能被直接修改,但是可以通過指針進行間接修改

來看下面的例子:

運行后輸出 5 3

  

單步執行,利用內存窗口進行查看,未修改前a為3

  
當利用指針間接修改a后,a在內存中顯示5
      
原意是想通過指針修改const常量a的值,運行后發現輸出的a依然是3,a的值表面上並沒有被改變。
但是查看內存窗口,發現a已經被改變,這里是編譯器優化導致的,遇見a時編譯器直接從寄存器中讀取3給a,而不從內存中讀取!
  
為了改善這種狀況,我們可以在定義a時再加一個volatile修飾,避免編譯器優化:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM