一直觉得没写的必要,但还是记一下吧。太书面化记不住,就简单些下。
类型转换分为隐式类型转换和强制类型转换。
隐式类型转换是编译器自动执行,无需程序员介入。如下:
//算术转换 double b = 5 + 3; //条件表达式 int val = 0; if (val)... ...
强制转换就是要在代码中写明的转换,具有危险性。
C风格是:(type) xx;C++提供了四种转换:static_cast、dynamic_cast、reinterpret_cast、const_cast。
static_cast<type-id>(expression)
编译时期进行的转换,没有运行时的类型检查。常用于:
1.基类和子类之间的下行转换
2.void*到原来指针的转换
3.避免出现可能多种转换的歧义
dynamic_cast<type-id>(expression)
运行时期的类型转换,用于将基类类型的指针或引用安全的转换为子类类型的指针或引用,有类型检查的功能,比较安全。
当转换指针类型失败时,返回0;当转换引用类型失败时,抛出bad_cast异常。
常用于类层次间的上下行转换,主要的场景是无法使用virtual函数-使用子类自己新增的函数