我試着執行下面的程序。C++ const_cast不會刪除變量的常量
#include<iostream>
using namespace std;
int main()
{
const int a = 0;
cout << &a <<endl;
int* ptr = const_cast<int*>(&a);
*ptr = 2;
cout << ptr <<endl;
cout << *ptr <<endl;
cout << a <<endl;
return 0;
}
產量爲:
0xbf92ebd8
0xbf92ebd8
2
0
據我所知,做的const_cast一個可變,這樣,就可以改變的。當我顯示* ptr時,反映的變化會反映出來,但是變化未反映在a中。 任何人都可以解釋嗎?編輯: 感謝您的所有答案。我知道我正在觀察一個未定義的行爲。而且,我最初在可變的和* const_cast *之間混淆。 但是,那麼你能告訴我所有的場景嗎,我們使用const_cast嗎?
AFAIR,修改常量變量被認爲是未定義的行爲。你可能期望發生任何事情。 – Spook
這是未定義的行爲。 'a'確實是const,所以你不能在不調用UB的情況下拋棄const。 – juanchopanza
編譯器很可能會將所有'a'的實例優化爲實際值。 –