为什么它不会在我的代码中更改const对象?

时间:2015-02-24 07:08:08

标签: c++

这是代码

int main()
{   
  const int i = 2;
  const int * pi = &i;
  int* j = const_cast<int *> (pi);
  *j = 11;
  std::cout << *pi << std::endl;
  std::cout << i << std::endl;
  return 0;
}

结果:

11

2&lt; ---为什么?

1 个答案:

答案 0 :(得分:9)

正如http://en.cppreference.com/w/cpp/language/const_cast所说:

  

即使const_cast可以从任何指针或引用中删除constness或volatile,使用结果指针或引用来写入声明为const的对象,或者访问声明为{{{ 1}}调用未定义的行为。

在这种情况下,您的编译器显然已经优化

volatile

  std::cout << i << std::endl;

因为 std::cout << 2 << std::endl; i,并且其值无法在任何有效程序中更改。 (实际上,const 的值会发生更改,因为程序无效;但是你的编译器 - 非常正确 - 并不关心这种可能性.C ++编译器和程序员,通常认为优化正确的代码比减少错误代码的不正确性更重要。)