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