C++类型转换

一直觉得没写的必要,但还是记一下吧。太书面化记不住,就简单些下。

类型转换分为隐式类型转换和强制类型转换。

隐式类型转换是编译器自动执行,无需程序员介入。如下:

//算术转换
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函数-使用子类自己新增的函数


原文地址:https://www.cnblogs.com/whuqin/p/4981995.html