类型转换分为哪几种?各自有什么样的特点?
static_cast
:用于基本数据类型之间的转换、子类向父类的安全转换、void*
和其他类型指针之间的转换;-
const_cast
:用于去除const
或volatile
属性; -
dynamic_cast
:用于子类和父类之间的安全转换,可以实现向上向下转换,因为编译器默认向上转换总是安全的,而向下转换时,dynamic_cast
具有类型检查的功能;dynamic_cast
转换失败时,对于指针会返回目标类型的nullptr
,对于引用会返回bad_cast
异常; -
reinterpret_cast
:用于不同类型指针之间、不同类型引用之间、指针和能容纳指针的整数类型之间的转换。