Dynamic_cast何时返回0,什么时候引发异常?CPP
When does dynamic_cast return 0 and when throws exception? cpp
在此链接中: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
声明为虚拟。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 处理多个异常集合的C++方法
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- CPP代码中出现FileNotFound异常
- 按名称 cpp 捕获特定异常
- CPP 异常获取抛出调用方的详细信息
- 如何避免 CPP 中的异常
- Dynamic_cast何时返回0,什么时候引发异常?CPP
- AWS-SDK-CPP异常处理残障,使用-FEXCEPTIONS启用
- 使用 JNI 从 cpp 调用 java 方法时出现异常
- 如何在 Java 中加载 cpp 库时避免异常
- 声纳库贝分析在 Eclipse 中失败,由于找不到异常语言"cpp"在本地分析中抛出错误
- 是否可以在另一个.cpp或.h文件中捕获异常
- cpp:用省略号捕获异常并查看信息