四个转型操作符
static_cast:基本上拥有与C旧式转型相同的威力与意义,以及相同的限制。
const_cast:用来改变表达式中的常量性或易变性(将某个对象的常量性去除掉)。
dynamic_cast:用来执行继承体系中“安全的向下转型或跨系转型动作”。也就是可以利用dynamic_cast,将"指向base class object的pointers或references"转型为"指向derived class objects的pointers或references",并得知转型是否成功。如果转型失败,会以一个null(指针)或exception(引用)表现出来。(只能用于继承体系之中,无法应用在缺乏虚函数的类型身上,也不能改变类型的常量性)
reinterpret_cast:这个转换结果与平台相关,不具移植性。最常用的用途就是转换“函数指针”类型。
typedef void (*FuncPtr)(); //定义函数指针,返回void
FuncPtr funcPtrArray[10]; //数组,里面有10个FuncPtrs
//假设你希望将下面函数的一个指针放入funcPtrArray中
int doSomething();//如果没有转型,不可能办到
funcPtrArray[0] = &doSomething; //错误,类型不符
//使用reinterpret_cast,可以强迫编译器了解你的意图
funcPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething); //编译通过