下面這段C++代碼,在VS2014中輸出的地址一樣,但取值卻不同!本人菜鳥,不懂原因,想請教各位大牛如何解釋:
const int arrSize = 10;
cout <<"arrSize = " << arrSize << " Addr = " << &arrSize << endl;
int *parrSize = const_cast<int*>(&arrSize);
(*parrSize)++;
cout << "arrSize = " << arrSize << " Addr = " << &arrSize << endl;
cout << "*parrSize = " << *parrSize << " Addr = " << parrSize << endl;
程式輸出:
arrSize = 10 Addr = 00C3F808
arrSize = 10 Addr = 00C3F808
*parrSize = 11 Addr = 00C3F808
明明地址都一樣,為何本身值卻不同?已經在Debug和Release下測驗過均是如此。
另外還有兩個個問題請教大家,查了很多資料,有的說const定義的內置型別,不需要分配記憶體(感覺不太對,畢竟可以取址?),有的說只要分配一次記憶體,后續使用中不再分配(個人感覺比較靠譜),還有的說是在編譯階段定義在符號表中,真正的exe中不含這個變數(不理解),有沒有權威點的說法,到底是哪種情況? 第二個,編譯器是如何實作const的不可更改性的?僅僅是檢查代碼中是否出現了賦值操作就判斷非法?還是說類似于宏定義那樣直接進行常量替換?謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115939.html
標籤:基礎類
上一篇:挑戰加密法,有人會嗎?
下一篇:簡單問題、基礎問題--類
