我有以下代码:
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的常量不会被删除?
常量变量还允许编译器进行某些优化,其中之一是编译器可以将值保留在寄存器中而不重新加载它.这样可以提高性能,但不会对需要重新读取的变量进行更改.有些编译器甚至通过不分配变量来优化常量,而只是简单地替换内联值.如果您更改变量a int而不是const int它将起作用,因为它可以在const_castIBM 关于运算符的文档中阅读:
如果抛弃已显式声明为const的对象的常量,并尝试修改它,则结果是未定义的.
您可以在此找到有关您遇到的问题及其无效原因的更多信息:
另外值得注意的是,如果您发现自己需要使用,那么您const_cast很可能会重新考虑您的设计.