static_cats 1.可以实现C++中内置基本数据类型之间的转换,enum,struct,int,char,float等。 int a = static_cast(7.987); 2.static_cast在相互联系的类型中转换,不一定包含虚函数。例如基类和子类之间的转换:其中,子类转换成父类指针是安全的,父类转化成子类是不安全的。(基类与子类之间的转换建议用dynamic_cast) 3.唯一一个可以用于类对象(非指针)转换的运算符,但仍然必须是子类和基类之间。
const_cast 用于取出const属性,把const类型的指针变为非const类型的指针,如:const int * fun(int x,inty){} int *ptr=const_cast<int *>fun(2,3)(针对指针)
dynamic_cast 1.其它三种都是编译时候完成的,dynamic_cast是在运行时候处理,运行时候要检查类型。 2.不能用于内置数据类型的转换。 3.dynamic_cast如果转换成功,返回的是指向类的指针或引用。转换不成,则返回NULL。 4.使用dynamic_cast转换,基类中一定含有虚函数,否则编译不通过。原因为只有存在虚函数,说明该基类有基类指针或引用指向派生类的情况,此时转换才有意义。而这个信息存储在虚函数表中,只有定义了虚函数,才会有虚函数表。 5.在类之间的转换,由下往上装换的dynamic_cast和static_cast效果是一样的。在由上往下进行转换时候,dynamic_cast比static_cast更安全,dynamic_cast会进行类型检查。检查类型错误可以返回NULL。
reinterpret_cast 将一个指针类型转换为其它指针类型,新类型的指针可以和旧类型的指针毫不相关,但他们存在潜在风险,因此被很少使用。如int* 与之间的转换float*会导致数据不能被完整的读取。