在C++中,const值是不能被修改的,可是咱們常常試着用指針去修改const的值,小程序
今天寫了一個小程序,以爲很神奇~~優化
如圖所示,i是一個int型的常量,初始值爲0,咱們用int型的指針j指向i,而後修改j指向地址的值,使之爲5;spa
而後咱們能夠看這個程序的結果:指針
能夠看到(*j)的值,改變了,而且j所指向的地址和i的地址是同一個地址,可是i的值居然仍是沒有變化,是0,編譯器
明明是同一個地址,爲何會有不一樣的值?編譯
最有趣的是,cout<<*(((&i)+2)-2)<<endl;的值依舊沒有改變,取到i的地址,將其變化後指向原來的地址,結果仍是沒有變化,那麼存放j所指向地址的內容5又放在哪裏了呢?原理
網上說C++對於const是用一種相似與宏的原理來處理的,編譯器只要看到i,就會將其付爲初始值,先暫且這麼理解吧!程序
仍是理解得不是很透徹。im
後來LZ在人人上發了條狀態,居然有人說我運行的結果不對,後來才發現這個問題是和編譯器相關的,img
在VS下,cout<<*(((&i)+2)-2)<<endl;的結果是5,與GNU C++的編譯器結果不一樣,看來這是編譯器優化的結果,編譯器的做用仍是挺大的!