Dynamic_cast何时返回0,什么时候引发异常?CPP

When does dynamic_cast return 0 and when throws exception? cpp

本文关键字:异常 CPP 什么时候 cast 何时 返回 Dynamic      更新时间:2023-10-16

在此链接中:http://www.cplusplus.com/doc/tutorial/typecasting/

当Dynamic_cast无法施放指针时,因为它不是完整的 所需类的对象 - 在第二个转换中 上一个示例 - 它返回一个空指针以指示故障。
如果Dynamic_cast用于转换为参考类型,并且 转换是不可能的,类型为bad_cast的例外 而是。

我无法从本文部分理解,当dinamic_cast返回null ptr的确切条件是什么。

如果有人可以向我展示一个两个代码示例,其中一个返回null ptr,另一个是一个例外,那将是非常适合的。谢谢。

这是差异:

DerivedClass *der = dynamic_cast<DerivedClass *>(someBaseClassPtr);

someBaseClassPtr未参考DerivedClass对象的情况下,将返回nullptr

DerivedClass& der = dynamic_cast<DerivedClass&>(someBaseClassObj);

如果someBaseClassObj实际上没有引用DerivedClass的对象。

,将抛出异常

如果失败的铸件是指向指针,则返回了无指针;如果是参考,则会抛出异常。

dynamic_cast也将返回null_ptr,如果基类都没有虚拟方法。它没有VTable可以使用。最佳实践是将最佳类的destructor声明为虚拟。