请教:const_cast,static_cast,dynamic_cast,reinterpret_cast之间的区别?

peifen 2003-11-14 10:33:15
我一直搞不太清楚他们之间的具体区别,请知道的指教。有例子就最好了。

还有,我在VC6下执行下面代码:
const int x = 10;
int *y = const_cast<int*>(&x);
*y = 20;
cout <<"&x:"<<&x<<",x:"<<x<<endl;
cout <<"y :"<<y<<",y:"<<*y<<endl;
执行结果:
&x:0012FF7C,x:10
y :0012FF7C,y:20
为什么地址一样,但是值却改掉了?

...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs001 2003-11-16
  • 打赏
  • 举报
回复
我想应该是这样的:一开始x被定义为常量且初始化为10,x就被当作编译期常量来使用.这样,
在执行cout <<"&x:"<<&x<<",x:"<<x<<endl时,编译器在编译期间就将x变成了10,也就是说,
编译器将这一语句优化成了:cout <<"&x:"<<&x<<",x:"<<10<<endl.而在打印*y时,*y的值是
在 执行期 确定的.这就是 地址一样,但是值却改掉了的原因.
我想,不同的编译器对此问题的处理可能是不同的,所以,在不同的编译器下可能会得到不同的
结果.
lifanxi 2003-11-15
  • 打赏
  • 举报
回复
研究这个问题没有意义,这本身就是与编译器有关的。
把一个真正为const的东西用const_cast作变换的行为是undefined的。
const_cast一般只用在不是真正const的东西上,比如下面的例子:
int a = 3;
const int * p = &a;
int * p2 = const_cast<int *>(p);
zhouqingyuan 2003-11-15
  • 打赏
  • 举报
回复
谁来解答一下为什么地址一样,值却不一样呢?
zhouqingyuan 2003-11-15
  • 打赏
  • 举报
回复
是想不明白,为什么地址一样,可是值却不一样呢?
yuantao 2003-11-14
  • 打赏
  • 举报
回复
const_cast是改变对象的常量性
static_cast用来代替c中常见的转型动作
dynamic_cast用来进行继承体系中的向下类型转换
reinterpret_cast用来进行强制类型转化,
具体的例子,你可以看more effective c++的条款2
介绍的很详细

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧