CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

菜鸟发问,关于const_cast转换

楼主aixuer(人在江湖)(應卓)2004-12-03 22:33:15 在 C/C++ / C++ 语言 提问

#include   <iostream>  
  using   namespace   std;  
   
   
  int   main()  
  {  
  int   const   a   =   19;  
   
  int   *p   =   const_cast<int*>(&a);  
  *p   =   133;  
  cout   <<   a   <<   endl;  
  cout   <<   *p   <<   endl;  
   
  cout   <<   &a   <<   endl;  
  cout   <<   p     <<   endl;  
   
  return   0;  
  }  
   
  本程序运行结果:  
  19  
  133  
  0012FF7C  
  0012FF7C  
   
  一个地址对应两个值,请指教此为何故? 问题点数:30、回复次数:7Top

1 楼aixuer(人在江湖)(應卓)回复于 2004-12-03 22:37:59 得分 0

自己顶一下哈Top

2 楼thebigmouse()回复于 2004-12-03 22:44:31 得分 30

C++中的CONST很好玩,它是C中#define的升级版本,却有不同的处理。define不分配空间,直接嵌入定义到代码中,const却既分配一个存储空间,又在用到它的地方采用替换的方式。  
  你的代码就相当于:  
  #include   <iostream>  
  using   namespace   std;  
   
   
  int   main()  
  {  
  int   const   a   =   19;  
   
  int   *p   =   const_cast<int*>(&a);  
  *p   =   133;  
  cout   <<   19   <<   endl;//   a  
  cout   <<   *p   <<   endl;  
   
  cout   <<   &a   <<   endl;  
  cout   <<   p     <<   endl;  
   
  return   0;  
  }Top

3 楼wozhaole(乐乐)回复于 2004-12-03 23:34:44 得分 0

对,常量折叠,就是编译器把const   int直接放到符号表中了,一看到a的时候就用19替代Top

4 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-12-04 13:47:38 得分 0

解释完全正确!反汇编看了看Top

5 楼kypfos(不在寻梦)回复于 2004-12-04 15:38:14 得分 0

很多语言的常量表都是这样的,为节省内存空间Top

6 楼UPCC(杂食动物)回复于 2004-12-04 16:25:58 得分 0

thebigmouse()   说得很好  
   
  int   const   a   =   19;//在这时是没有为a分配空间的。  
  int   *p   =   const_cast<int*>(&a);//这时才为a分配了空间  
  但因为const值在编译时已经被替换了,所以a总是19  
  Top

7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-04 19:16:22 得分 0

就是a还是占了空间的  
  const_cast去掉a   的const属性,把地址付给了p,从而p的地址也是a的地址了Top

相关问题

  • 高分向求:数据类型转换:static_cast,const_cast等用法
  • 怎样将string 转换为 const char* ??
  • 如何将const undesign short *转换成CString?
  • 怎么将char * 转换为const wchar_t *
  • 关于const强制转换的问题?
  • const_cast问题
  • static_cast对double转换的问题
  • “EXstring::EXstring(const EXstring &)” : 不能将参数 1 从“char [8]”转换为“const EXstring &”
  • 如何解决unsigned char * 到 const char *的转换
  • CString变量如何转换为const char*类型?

关键词

  • cast
  • 地址
  • const
  • 空间
  • cout
  • using namespace std
  • main

得分解答快速导航

  • 帖主:aixuer
  • thebigmouse

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo