在C++中,dynamic_cast
是一种用于安全地将指针或引用从一个类类型转换为另一个类类型的运算符。它主要用于在继承层次结构中进行类型转换,并在运行时执行类型检查,以确保转换的安全性。
dynamic_cast
执行以下操作:
-
1. 它检查
expression
是否指向多态(有虚函数的)类的有效对象。如果expression
不是多态类型的指针或引用,dynamic_cast
将返回nullptr
(对于指针)或抛出std::bad_cast
异常(对于引用)。 -
2. 如果
expression
是多态类型的指针或引用,则它在运行时执行类型检查来确定对象的实际类型。如果转换是安全的,即目标类型是源类型的公有派生类,dynamic_cast
将返回指向新类型的指针或引用。 -
3. 如果
expression
指向的对象的类型不兼容于new_type
,则对于指针,dynamic_cast
返回nullptr
,对于引用,它会抛出std::bad_cast
异常。
#include <iostream>class Base {
public:virtual ~Base() {}
};class Derived : public Base {
public:virtual ~Derived() {}
};int main() {Base* ptr = new Derived();// 使用 dynamic_cast 将 Base* 转换为 Derived*Derived* derivedPtr = dynamic_cast<Derived*>(ptr);if (derivedPtr) {std::cout << "Dynamic cast succeeded" << std::endl;} else {std::cout << "Dynamic cast failed" << std::endl;}delete ptr;return 0;
}