首页 > 其他 > 详细

static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别

时间:2014-04-04 11:34:15      阅读:492      评论:0      收藏:0      [点我收藏+]

static_cast

1. 基础类型之间的转换。如:float转成int、int转成unsigned int等

2. 指针转成void*。如:float*转成void*、CBase*转成void*、函数指针转成void*等

3. 派生类指针【引用】转成基类指针【引用】。如:Derive*转成Base*、Derive&转成Base&等

4. 非virtual继承时,可将基类指针【引用】转成派生类指针【引用】多继承时,会做偏移处理)。如:Base*转成Derive*、Base&转成Derive&等

dynamic_cast  专门用于处理多态机制,对继承体系内的对象的指针【引用】进行转换,转换时会进行类型检查

如果能转换会返回对应的指针【引用】;不能转换时,指针会返回空,引用则抛出std::bad_cast异常

另外,对于菱形非virtual继承、非public继承,转换时会抛出异常

reinterpret_cast  对指针【引用】进行原始转换,不做任何偏移处理(当然:多继承时,也不会做偏移处理

1. 将指针【引用】转换成整型。如:float*转成int、CBase*转成int、float&转成int、CBase&转成int等

2. 指针【引用】之间互转。如:float*转成int*、CBase&转成int、CBase*转成CBase2*、CBase&转成CBase2&等

const_cast   去掉或增加constvolatile特性

C类型强制转换   形式:(type)objecttype(object)

最好是使用type(object);原因是:在某些编译器下,(type)object不会调用构造函数,而type(object)下则肯定会调用构造函数

C类型强制转换会按照以下顺序进行尝试转换:

a. const_cast
b. static_cast
c. static_cast, then const_cast
d. reinterpret_cast
f. reinterpret_cast, then const_cast

static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别,布布扣,bubuko.com

static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别

原文:http://www.cnblogs.com/kekec/p/3643578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!