可能重复:
const_casting question
以下代码尝试更改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
*/
答案 0 :(得分:5)
const_cast
不允许你修改常量对象,而是将引用/指针的常量删除到非const对象,并且能够调用旧的破坏的接口,库不会修改,但采用非const指针。修改 const的对象是未定义的行为。
现在进行实际测试了。有可能编译器已将编译时常量 a
(您承诺为5)的值替换为函数中的不同用法。当您打印 a
时,编译器正在打印5
,而不是读取该值。
答案 1 :(得分:4)
你骗了编译器。你告诉它a
是const,所以它继续进行处理,好像它一样,用编译时常量a
替换5
的实例。
你正在做的是未定义的行为。