社区
C语言
帖子详情
关于static_cast dynamic_cast reinterpret_cast的使用方法和场合。
ppgo
2002-07-25 06:15:41
大家赐教一下吧,什么异同??
举点例子.
...全文
123
6
打赏
收藏
关于static_cast dynamic_cast reinterpret_cast的使用方法和场合。
大家赐教一下吧,什么异同?? 举点例子.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
_Freemanhu
2002-07-25
打赏
举报
回复
dynamic_cast:动态类型转换
static_cast:静态类型转换
reinterpret_cast:重新解释类型转换
const_cast:常量类型转换
专业的上面很多了,我说说我自己的理解吧:
synamic_cast一般用在父类和子类指针或应用的互相转化;
static_cast一般是普通数据类型(如int m=static_cast<int>(3.14));
reinterpret_cast很像c的一般类型转换操作
const_cast是把cosnt或volatile属性去掉
han.bingtao
2002-07-25
打赏
举报
回复
只说一点个人理解,不一定对。
reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最为强大!但不能将非32bit的实例转成指针。总之,只要是32bit的东东,怎么转都行!
static_cast和dynamic_cast可以执行指针到指针的转换,或实例本身到实例本身的转换,但不能在实例和指针之间转换。static_cast只能提供编译时的类型安全,而dynamic_cast可以提供运行时类型安全。举个例子:
class A;class B:A;class C。
上面三个类A是基类,B继承A,C和AB没有关系。
有一个函数void function(A&a);
现在有一个对象是B的实例b,一个C的实例c。
function(static_cast<A&>(b)可以通过而function(static<A&>(c))不能通过编译,因为在编译的时候编译器已经知道c和a的类型不符,因此static_cast可以保证安全。
下面我们骗一下编译器,先把c转成类型a
B& ref_b = reinterpret_cast<B&>c;
然后function(static_cast<A&>(ref_b))就通过了!因为从编译器的角度来看,在编译时并不能知道ref_b实际上是c!
而function(dynamic_cast<A&>(ref_b))编译时也能过,但在运行时就失败了,因为dynamic_cast在运行时检查了ref_b的实际类型,这样怎么也骗不过去了。
在应用多态编程时,当我们无法确定传过来的对象的实际类型时使用dynamic_cast,如果能保证对象的实际类型,用static_cast就可以了。至于reinterpret_cast,我很喜欢,很象C语言那样的暴力转换:)
kwok_1980
2002-07-25
打赏
举报
回复
static_cast就是无条件的转移,无论行不行都转移,所以有潜在危险!
dynamic_cast就是有条件转移,只有符合条件才转移类型,所以是在有判定
基础上进行的,是安全的做发,
kwok_1980
2002-07-25
打赏
举报
回复
static_cast就是无条件的转移,无论行不行都转移,所以有潜在危险!
dynamic_cast就是有条件转移,只有符合条件才转移类型,所以是在有判定
基础上进行的,是安全的做发,
FFXI
2002-07-25
打赏
举报
回复
除了特殊情况(如直接写IO口),不要用reinterpret_cast。太危险了。
anrxhzh
2002-07-25
打赏
举报
回复
http://www.csdn.net/develop/Read_Article.asp?Id=10703
static
_
cas
t、
dynamic
_
cas
t、re
int
erp
ret_
cas
t和const_
cas
t
标准C++的类型转换符:
static
_
cas
t、
dynamic
_
cas
t、re
int
erp
ret_
cas
t和const_
cas
t
dynamic
_
cas
t,
static
_
cas
t 和 re
int
erp
ret_
cas
t
讨论
dynamic
_
cas
t,
static
_
cas
t<> 和 re
int
erp
ret_
cas
t<> and Runtime Type Information
例说 const_
cas
t,re
int
erp
ret_
cas
t,
static
_
cas
t,
dynamic
_
cas
t代码.rar
例说 const_
cas
t,re
int
erp
ret_
cas
t,
static
_
cas
t,
dynamic
_
cas
t代码.rar
标准C++的类型转换符:
static
_
cas
t、
dynamic
_
cas
t、re
int
erp
ret_
cas
t和const_
cas
t
标准C++的类型转换符:
static
_
cas
t、
dynamic
_
cas
t、re
int
erp
ret_
cas
t和const_
cas
t
C++中的类型转换
static
_
cas
t、
dynamic
_
cas
t、const_
cas
t和re
int
erp
ret_
cas
t总结
主要介绍了C++中的类型转换
static
_
cas
t、
dynamic
_
cas
t、const_
cas
t和re
int
erp
ret_
cas
t总结,需要的朋友可以参考下
C语言
69,396
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章