作個小實驗。 void func_a(const int& a) { int& b = const_cast<int&>(a); b = 200; cout << a << ", " << &a << endl; } int main() { const int a = 100; cout << a << ", " << &a << endl; func_a(a); cout << a << ", " << &a << endl; } ------------------------------------------------- 100, 0012FED4 200, 0012FED4 100, 0012FED4 ------------------------------------------------- 可以看到,在func_a內,明明a的值已經被改成200了(可以由變數位址確認)。為了確認這一點,加上了第四個cout,如下。 cout << *(int*)&a << ", " << &a << endl; ------------------------------------------------- 100, 0012FED4 200, 0012FED4 100, 0012FED4 200, 0012FED4 ------------------------------------------------- 可以看到第四個cout果然印出a的內容已改變為200。但是第三個cout卻是印出原來的值100,這是為什麼?答案在將程式反組譯,從組合語言的層面來看就很明顯了。 cout << a << ", " << &a << endl; 0041E6B2 push ...