C语言中对内置类型可以进行强制转换,但是这种转换是不安全的。
所以一般,目前我们推荐使用C++中的cast函数进行类型转换。
基本数据类型之间的转换
类型的层次转换
static_cast (编译类型检查)
1、基本数据类型之间的转换。如int转char,int转enum等。使用中的转换安全性需要开发者自己去保证。
如int转换为char。那么static_cast只是纯粹的截断,把int的低8位的内容复制到char中,并直接抛弃高位;如果int >127 或 < -127 那么就会出现数据丢失。
2、把空指针类型转换成任意其他类型的空指针。
3、把任何类型的表达式类型转换成void类型。
4、用于类层次结构中父类和子类之间的指针和引用的转换。
对于类层次结构中的转换有两种转换:上行转换和下行转换。
对于static_cast,上行转换时是安全的,但是下行转换是危险的,但是在编译时并无法发现问题。
dynamic_cast(动态类型检查)
1、主要是用于类层次结构之间的类型转换,由于具有运行时类型检查,因而可以保证下行转换的安全性,即转换成功就返回正确类型指针,转换失败就返回NULL。
而static_cast就不是这种类型安全的。