C++ dynamic_cast何时返回0,何时抛出异常?cpp

C++ dynamic_cast何时返回0,何时抛出异常?cpp,c++,C++,在此链接中: 当动态_cast无法强制转换指针时,因为它不是完整的 所需类的对象-在 上一个示例-它返回一个空指针以指示失败。 如果使用动态_cast转换为引用类型,则 无法进行转换,将引发类型为bad_cast的异常 相反 从本文的这一部分,我无法理解dinamic_cast返回空ptr以及抛出异常的确切条件 如果有人能给我看两个代码示例,其中一个返回null ptr,另一个抛出异常,那将非常合适。谢谢。如果失败的强制转换指向指针,则返回空指针;如果是引用,则抛出异常。如果失败的转换是指针,

在此链接中:

当动态_cast无法强制转换指针时,因为它不是完整的 所需类的对象-在 上一个示例-它返回一个空指针以指示失败。
如果使用动态_cast转换为引用类型,则 无法进行转换,将引发类型为bad_cast的异常 相反

从本文的这一部分,我无法理解dinamic_cast返回空ptr以及抛出异常的确切条件


如果有人能给我看两个代码示例,其中一个返回null ptr,另一个抛出异常,那将非常合适。谢谢。

如果失败的强制转换指向指针,则返回空指针;如果是引用,则抛出异常。

如果失败的转换是指针,则返回空指针;如果是引用,则会引发异常。

区别如下:

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

如果
someBaseClassObj
实际上没有引用
DerivedClass

的对象,则将引发异常。区别如下:

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

如果
someBaseClassObj
实际上没有引用
DerivedClass
dynamic\u cast
的对象,则将引发异常。如果所有基类都没有虚方法,则
null\u ptr
也将返回。它没有可使用的
VTable
。最佳做法是将基本est类的析构函数声明为虚拟。

动态\u cast
如果没有任何基类具有虚拟方法,也将返回
null\u ptr
。它没有可使用的
VTable
。最佳做法是将基本est类的
析构函数声明为虚拟。

有什么特别不清楚的?在强制转换指针的情况下,它返回一个
nullptr
,在强制转换引用的情况下,它抛出一个异常?如果使用强制转换指针,它将返回一个
nullptr
,如果使用强制转换引用,它将抛出一个异常。@可能OP在英语阅读方面有问题comprehension@Brian有时,英语的主宰者,C++中的初学者却忘了没有一个“<代码> NulLReF <代码>之类的东西(一个代码> *null pPTR <代码>)@方舟子可能在英语阅读方面有问题comprehension@Brian有时,英语的主宰者,C++中的初学者却忘了没有一个“<代码> NulLReF <代码>之类的东西(一个代码> *null pPTR <代码>)
DerivedClass& der = dynamic_cast<DerivedClass&>(someBaseClassObj);