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

Why it doesn't change const object in my code?

本文关键字:const 对象 代码 我的 为什么      更新时间:2023-10-16

这是代码

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<---为什么?

Ashttp://en.cppreference.com/w/cpp/language/const_cast把它放在:

即使const_cast可以从任何指针或引用中删除常量或波动性,使用结果指针或引用写入声明为const的对象或访问声明为volatile的对象也会调用未定义的行为。

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

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

  std::cout << 2 << std::endl;

由于iconst并且其值在任何有效程序中都不能改变。(碰巧的是,i的值确实发生了变化,因为程序无效;但您的编译器并不关心这种可能性,这是非常正确的。C++编译器和程序员通常认为优化正确的代码比减轻错误代码的不正确性更重要。)