菜鸟发问,关于const_cast转换
#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*类型?




