發表文章

目前顯示的是 11月, 2009的文章

C++ Const

作個小實驗。 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 offset std::