我是靠谱客的博主 震动大侠,最近开发中收集的这篇文章主要介绍C++:const_cast类型转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

针对const_cast,太多人在用同一个示例问同一个问题:
void main(){
   const int a = 3;
   const int *pc = &a;
   int *p = const_cast<int *>(&a);
   *p = 5;
   printf("%d,%d,%d",*p,*pc,a); //结果是 5,5,3
}
最终输出的a,为何是3而不是5?
C++对用const定义的常数变量,不是靠地址空间中的内容来取数的,而是靠保存在符号表中的索引来取数的,因此常数变量a无论什么情况下使用都是常数3。
事实上,变量a地址空间中的内容确实是5,但即使你*(&a)来取数仍是3。你可以这样来取变量a地址空间中的内容:
  const int *d = &a;
  printf("%dn", *d);

  int d = const_cast<int>(&a);
  printf("%dn", *(int *)d);
此时输出的结果是5。

 

上述问题都是针对单变量常数而言的,对于结构或类,const_cast的使用与你的直观理解是无出入的。
C++提供了去除const或volatile属性的const_cast类型转换,使你可以对一常数变量进行修改,问题是你的设计为什么会导致非要对一常数变量进行修改呢?
C++的编程准则:const或volatile属性,禁止在指针或引用的类型转换中移除。

最后

以上就是震动大侠为你收集整理的C++:const_cast类型转换的全部内容,希望文章能够帮你解决C++:const_cast类型转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部