关于std::bad_cast异常


什么是bad_cast异常?

当对引用类型的动态转换未通过运行时检查(例如,因为类型与继承无关)时,将引发此类型的异常。

继承关系

class bad_cast : public exception

例子:

// expre_bad_cast_Exception.cpp
// compile with: /EHsc /GR
#include <typeinfo>
#include <iostream>

class Shape {
public:
   virtual void virtualfunc() const {}
};

class Circle: public Shape {
public:
   virtual void virtualfunc() const {}
};

using namespace std;
int main() {
   Shape shape_instance;
   Shape& ref_shape = shape_instance;
   try {
      Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);
   }
   catch (bad_cast b) {
      cout << "Caught: " << b.what();
   }
}

备注

一定要注意,对引用进行转换时才可能触发此异常。如果时指针,则返回NULL。

如果表达式正在取消对指针的引用,而该指针的值为零,则typeid将引发一个bad_typeid异常。如果指针没有指向有效的对象,则抛出一个“__non_rtti_object。它表示试图分析由于对象无效而触发错误的RTTI。(例如,它是一个错误的指针,或者代码不是用/GR编译的)。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM