朋友一個問題引發了我一連串的思考.

时间:2021-04-11 19:20:02
const int& ri = i; //ok,引用不區分類型
ri++; //error, ri為常量,不可變
i++; //ok,=右邊的變量與引用無關
ri=b; //error, ri為常量
i=j; //ok,=右邊的變量與引用無關
int & const ri = i; //error,不存在這種形式,沒有意義
他問我為甚麼ri++會出現編譯錯誤,而i++卻不會.ri,i不都指向同一塊內存區域嗎?
其實我們在IDE中看到的ri, i 這些變量,編譯器都是把它們做為一種標記或者說是索引來使用的.它們並不直接代表某個內存單元,僅僅作為一種操作符來使用.關鍵字const前綴說明這個變量對分配給它的內存單元唯有只讀的權限,而不是說它的內存空間操作系統不允許寫.你可以使用const_cast < type-id >這個操作符來修改const變量的訪問權限,那塊內存空間對你又是可寫的了!