四中类型转换
static_cast
reinterpret_cast
const_cast
dynamic_cast
static_cast
静态检测转换是否合法。
例如类A和B不相干,则
A*
不能转为B*
。如果A继承自B,则A*
和B*
可以互相转换。
dynamic_cast
在static_cast的基础上,使用RTTI进行运行时刻类型检查,转换失败返回NULL。
例如M和N继承自A,
N*
转为A*
后,再转为M*就会返回NULL;但是可以再转回N*
。
const_cast
用来去掉const类型属性。例如将const char*
转为char*
。不到万不得已不要用。
啥叫万不得已呢?例如有一个旧的代码库需要传递
char*
,而实际上应该传递const char*
,在自己的代码里自然需要使用const char*
,到最后调用旧的代码库时再去掉const属性。
reinterpret_cast
二进制层面的类型转换,只是转换编译器编译时刻记录的类型,运行时刻不会进行任何字节层面的转换。
例如A和B不相干,A*转为B*可以转换。