什么是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编译的)。