关于const变量的一点理解
無意間看到一題目 是關于const變量的。代如下:
問題是:pCInt = &LENGTH。然而后面的輸出是1 2。為什么???
?
一步一步分析,const int *pCInt = & LENGTH;pCInt 為指向LENGTH地址的值,且為常量。
(int) *pCInt = 2; 實際上等同const_cast<int>(*pCInt) = 2;
去掉變量的常量屬性再賦值。也就是改變了 pCInt 指向的地址的值為2。
即然值為2,那么LENGTH中內存的值也為2,為什么會輸出1呢?是不是編譯器做了什么處理?(我當時給出的回答就是編譯器做出了處理,具體是什么不清楚)
后來仔細想了下,可能是符號替換,不知道對不。
?
下面用匯編代碼來驗證我們的想法。
(為了看得清楚,把cout改成printf了)
從printf("%d/n",LENGTH);
00401056 ?push ? ? ? ?1 ??
可以看出,編譯器是做的符號替換,就是在編譯的時候遇到LENGHT直接替換為1。
?
printf("%d/n",*pCInt);
00401065 ?mov ? ? ? ? eax,dword ptr [pCInt]?
00401068 ?mov ? ? ? ? ecx,dword ptr [eax]?
?
遇到*pCInt是直接從內存中去取值。
?
總結如下:
?1.變量本身的類型最好不要去改變,除非必要。
?2.要明確cosnt的意義,什么時候該用,什么時候不該用,這是基本功。
?3.理解符號替換,就相當于宏定義。
?
總結
以上是生活随笔為你收集整理的关于const变量的一点理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX 高手的 20 个习惯
- 下一篇: ARM处理器中“8位位图”