首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const_casting问题

const_casting问题
EN

Stack Overflow用户
提问于 2010-12-23 20:12:02
回答 1查看 774关注 0票数 1

我有以下代码:

代码语言:javascript
复制
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的常量不会被移除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-23 20:35:21

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

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

您可以在此处找到有关您遇到的问题以及问题无法解决的原因的更多信息:

另外,可以注意到,如果您发现自己需要使用const_cast,那么您很有可能应该重新考虑您的设计。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4518630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档