1、C语言中的转型操作符有两个问题:
a、是个通用的转换操作符,也就是说,可以从一个类型转换到其他类型。通用必定是低效率和冗余的,因为要考虑很多情况。
b、在代码中,难以辨认出哪些是类型转换。
2、C++提供了新式的转换操作符,有static_cast, dynamic_cast, const_cast, reinterpret_cast, 可以认为对不同的类型转换进行了细化,精确地指出意图,效率高。另外一方面,很容易在代码中辨认出这些类型转换。
3、考虑,C++新式转换符的用法。
a、const_cast:去除对象的常量性。
b、dynamic_cast:用于向下转型或者跨系转型,类型必须要有虚方法表。转换是安全的,转换目标是指针,转换失败返回null,转换目标是引用,抛出异常。
c、reinterpret_cast:比较特殊,不具移植性。比如:方法指针为 void (*)(int),把方法int F(int) 赋给方法指针,需要类型转换。
d、其它的情况下,使用static_cast。