可能重复:
const_casting问题
以下代码尝试更改const int a的值; 但似乎a和b都指向相同的内存地址但打印出不同的值.有人可以解释一下原因吗?
const int a = 5;
int *b = const_cast<int*>(&a);
*b = 7; //not working why??
cout<<"\nConst Cast: "<<a<<" "<<&a;
cout<<"\nConst Cast: "<<*b<<" "<<b;
cout<<"\nConst Cast: "<<a<<" "<<&a;
/* Output
Const Cast: 5 0027F7FC
Const Cast: 7 0027F7FC
Const Cast: 5 0027F7FC
*/
Run Code Online (Sandbox Code Playgroud)
const_cast是不是允许你修改一个常量对象,而是删除一个引用/指针的常量到非const对象,并能够调用旧的破坏的接口,库不会修改,但采取了非常量指针.修改对象THA 是常量是不确定的行为.
现在进行实际测试了.有可能编译器已将编译时常量 a(您承诺为5)的值替换为函数中的不同用法.当您打印 a编译器正在打印时5,不会读取该值.