const_cast <int *>不起作用。为什么?</INT *>

时间:2012-03-08 02:08:16

标签: c++ const

  

可能重复:
  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
*/

2 个答案:

答案 0 :(得分:5)

const_cast不允许你修改常量对象,而是将引用/指针的常量删除到非const对象,并且能够调用旧的破坏的接口,库不会修改,但采用非const指针。修改 const的对象是未定义的行为。

现在进行实际测试了。有可能编译器已将编译时常量 a(您承诺为5)的值替换为函数中的不同用法。当您打印 a时,编译器正在打印5,而不是读取该值。

答案 1 :(得分:4)

你骗了编译器。你告诉它a是const,所以它继续进行处理,好像它一样,用编译时常量a替换5的实例。

你正在做的是未定义的行为。