C++ 为什么即使使用const_cast,我也不能修改const int的内容?

C++ 为什么即使使用const_cast,我也不能修改const int的内容?,c++,C++,如果它是内存的RO段,它如何在调试模式下显示修改 编辑: 因为它是关闭的-我将在这里添加它 我查看了汇编输出 a = (int*)(&y); 编译器只会在编译时替换常量值。与RO段无关,因为我错误地假设:修改常量对象的行为未定义 它如何在调试模式下显示修改 因为程序的行为是未定义的。它是未定义的行为。任何事情都有可能发生。谁告诉你它在内存的RO段?声明const int y=7;基本上是向编译器承诺永远不会更改y的值。如果你对编译器撒谎,它会用难以跟踪的错误来踢你的屁股。你不会抛弃声明

如果它是内存的RO段,它如何在调试模式下显示修改

编辑: 因为它是关闭的-我将在这里添加它

我查看了汇编输出

a = (int*)(&y);

编译器只会在编译时替换常量值。与RO段无关,因为我错误地假设:

修改常量对象的行为未定义

它如何在调试模式下显示修改


因为程序的行为是未定义的。

它是未定义的行为。任何事情都有可能发生。谁告诉你它在内存的RO段?声明const int y=7;基本上是向编译器承诺永远不会更改y的值。如果你对编译器撒谎,它会用难以跟踪的错误来踢你的屁股。你不会抛弃声明为const的变量中的constness,假设类Foo中有int a,并且有一个类函数void Foo::dosomething const,其中的任何变量都不能修改,但您可以在dosomething const中使用const_cast,因为int a并没有声明为const。知道了?
a = (int*)(&y);
std::cout << (int)*(&y) << std::endl;
00381CB6  push        offset std::endl<char,std::char_traits<char> > (03813C5h)  
00381CBB  push        7  
00381CBD  mov         ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (03900ACh)]  
00381CC3  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (03900B8h)]  
00381CC9  mov         ecx,eax  
00381CCB  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (03900BCh)]