在此链接中: http://www.cplusplus.com/doc/tutorial/typecasting/
当dynamic_cast无法转换指针时,因为它不是完整的 所需类的对象-as在第二次转换中 前面的例子 - 它返回一个空指针来指示失败 如果使用dynamic_cast转换为引用类型和 转换是不可能的,抛出bad_cast类型的例外 代替。
我无法从这个文本部分理解,当dinamic_cast返回null ptr时,以及抛出异常时的确切条件是什么。
如果有人可以向我展示两个代码示例,其中一个返回null ptr而另一个抛出异常,那将非常合适。感谢。
答案 0 :(得分:5)
区别在于:
DerivedClass *der = dynamic_cast<DerivedClass *>(someBaseClassPtr);
如果nullptr
未引用someBaseClassPtr
的对象,则会返回DerivedClass
。
DerivedClass& der = dynamic_cast<DerivedClass&>(someBaseClassObj);
如果someBaseClassObj
实际上没有引用DerivedClass
的对象,则会抛出异常。
答案 1 :(得分:1)
如果失败的强制转换是指针,则返回空指针;如果是引用,则抛出异常。
答案 2 :(得分:0)
dynamic_cast
也将返回null_ptr
。它没有VTable
可以使用。最佳做法是将基础类的destructor
声明为虚拟。