dynamic_cast 空指针
时间: 2023-07-22 20:02:23 浏览: 71
空指针
`dynamic_cast` 是 C++ 中的一个类型转换操作符,用于在运行时进行类型检查和类型转换。当对空指针使用 `dynamic_cast` 时,会返回一个空指针。
例如,假设有一个基类 `Base` 和一个派生类 `Derived`:
```cpp
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
void foo() {
std::cout << "Derived::foo()" << std::endl;
}
};
```
如果我们将一个指向派生类对象的指针转换为指向基类对象的指针,可以使用 `dynamic_cast`:
```cpp
Derived* derivedPtr = new Derived();
Base* basePtr = dynamic_cast<Base*>(derivedPtr);
```
在这个例子中,转换成功,`basePtr` 指向了 `derivedPtr` 指向的对象。但是,如果我们将一个空指针进行转换,即:
```cpp
Base* basePtr = dynamic_cast<Base*>(nullptr);
```
那么 `basePtr` 将会是一个空指针,因为空指针没有实际的对象进行类型转换。
需要注意的是,在使用 `dynamic_cast` 进行类型转换时,如果转换失败(即指针的实际类型与目标类型不匹配),返回的结果将是一个空指针(对于指针类型)或者抛出 `std::bad_cast` 异常(对于引用类型)。因此,在使用 `dynamic_cast` 进行类型转换时,需要进行返回值的检查,以确保转换成功。
阅读全文