1

我有以下代码:

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;
}

为什么'a'的值没有变成29?这是否意味着在 const_casting b 时不会删除 a 的 const 性?

4

1 回答 1

5

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

如果您抛弃已明确声明为 const 的对象的 const 性,并尝试修改它,则结果是未定义的。

您可以在此处找到有关您遇到的问题以及为什么它不起作用的更多信息:

附带说明一下,如果您发现自己需要使用 ,那么const_cast您很有可能应该重新考虑您的设计。

于 2010-12-23T12:35:20.990 回答