ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – const_casting问题

2019-09-29 17:05:52  阅读:172  来源: 互联网

标签:const-cast c


参见英文答案 > Two different values at the same memory address                                    6个
我有以下代码:

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的常量不会被删除?

解决方法:

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

If you cast away the constness of an
object that has been explicitly
declared as const, and attempt to
modify it, the results are undefined.

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

> The const_cast operator (IBM)
> C++ const_cast usage instead of
C-style
casts

> const_cast
confusion

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

标签:const-cast,c
来源: https://codeday.me/bug/20190929/1832220.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有