const_casting问题

bad*_*ash 1 c++ const-cast

我有以下代码:

int main(){
  const int a = 1;
  const int* b(&a);
  int* c = const_cast<int*>(b);
  *c = 29; 
  cout<<*c<<a<<*b;
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

为什么'a'的值不变为29?这是否意味着当const_casting b时,a的常量不会被删除?

Tom*_*sen 5

常量变量还允许编译器进行某些优化,其中之一是编译器可以将值保留在寄存器中而不重新加载它.这样可以提高性能,但不会对需要重新读取的变量进行更改.有些编译器甚至通过不分配变量来优化常量,而只是简单地替换内联值.如果您更改变量a int而不是const int它将起作用,因为它可以在const_castIBM 关于运算符的文档中阅读:

如果抛弃已显式声明为const的对象的常量,并尝试修改它,则结果是未定义的.

您可以在此找到有关您遇到的问题及其无效原因的更多信息:

另外值得注意的是,如果您发现自己需要使用,那么您const_cast很可能会重新考虑您的设计.