我有以下代码:
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的常量不会被移除?
发布于 2010-12-23 20:35:21
常量变量还允许编译器进行某些优化,其中之一是编译器可以将值保留在寄存器中,而不重新加载它。这提高了性能,但不能用于更改的变量,因为这些变量需要重新读取。一些编译器甚至通过不分配变量,而只是简单地替换内联的值来优化常量。如果您将变量a更改为int而不是const int,它将会起作用,因为可以从IBM提供的有关const_cast操作符的文档中读取:
如果您丢弃已显式声明为const的对象的常量,并尝试修改它,则结果是未定义的。
您可以在此处找到有关您遇到的问题以及问题无法解决的原因的更多信息:
另外,可以注意到,如果您发现自己需要使用const_cast,那么您很有可能应该重新考虑您的设计。
https://stackoverflow.com/questions/4518630
复制相似问题