關於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