C++四种类型转换,static_cast编译时进行,下行转换不安全,dynamic_cast运行时进行,下行转换安全,const_cast可用于去除const,谨慎使用,reinterpret_cast从底层二进制进行转换,无所不能,不到万不得以不能用。
四种类型转换的使用
static_cast
下行转换:基类 –> 派生类转换
上行转换:派生类–>基类转换
编译时进行类型转换
应用
- 上行转换安全,下行转换不安全,可能造成非法内存访问;
- 一般常见的其它类型转换
dynamic_cast
运行时进行类型转换,被转换对象需要有虚函数进行运行时类型判别。
相比较于static_cast,dynamic_cast的下行转换安全,如果转换失败返回空指针。
const_cast
const_cast可以进行 const对象–>非const类型转换 和 非const类型转换–>const类型转换两种类型。唯一一个可以对const对象进行使用的转换,使用需要谨慎,防止修改了const对象。典型应用场景是底层const类型的函数重载。
一个危险的使用方式,通过const_cast之后改变了通过b改变了a原始值。
1 | int a=0; |
一个正常的使用方式,用作const底层重载的参数。
1 |
|
reinterpret_cast
最不安全,从底层二进制进行类型转换,依赖于平台,十分危险不能使用,可以进行任意类型转换。
1 | int a; |