什么是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編譯的)。