C++类型转换
static_cast 相近类型之间的类型
reinterpret_cast 不相近类型之间的类型
const_cast 去掉对象const属性的转换
dynamic_cast 规范向下转换,转换是安全的 是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。 C++独有
若对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
若对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。
【注意】:
1、dynamic_cast在将父类cast到子类时,父类必须要有虚函数,否则编译器会报错。
2、 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全
class A { virtual void a() {}; }; class B : public A { }; void func(A* p) { B* ptr = dynamic_cast<B*>(p); if (ptr) { cout << "转换成功"<<endl; } else { cout << "转换失败"<<endl; } } int main() { double a = 3.141; int b = 134; b = static_cast<int>(a); int*c = &b; //a = reinterpret_cast<double>(c); 不同类型无法转换 b = reinterpret_cast<int>(c); const int d = 10; c = const_cast<int*>(&d);//只能将const的地址转为非const的地址 并且类型要相同 A e; B f; func(&e); func(&f); }