四种类型转换
-
static_cast
-
提供C++编译器认为安全的类型转换
-
没有任何联系的类型转换是不接受的
-
基类类型与派生类类型的转换是支持的
例一
int a = 10; double *d = static_cast<double*>(a);//将int*转换成double*是不支持的
例二
class Base { public: Base(){ } }; class Drived :public Base { public: Drived():Base(){ } }; int main() { Drived d; Base b; //Base* b = static_cast<Base*>(&d); Drived* dr = static_cast<Drived*>(&b); //可以转换,但是不安全 }
-
-
dynamic_cast
-
用于具有虚函数的基类与派生类的类型转换
-
当由基类指针转换成派生类的时候,会对指针指向内存的虚函数表指针指向的虚函数表中的运行时类型信息(RTTI)进行检查。如果通过检查则返回派生类对象地址,否则返回nullptr。
-
-
const_cast
-
用于去除常量的常量属性
-
转换的类型必须是指针或引用
举例
int a = 10; const int &b =a; const_cast<int&>(b) = 40;
因为b是常量,直接赋值给b是不符合C++语法的,因此需要通过const_cast进行转换
-
-
reinterpret_cast
- 提供c语言风格的类型转换,不安全