因為強迫轉換為援用類型掉敗,dynamic_cast 運算符激發 bad_cast 異常。
語法
catch (bad_cast) statement
備注
bad_cast 的接口為:
class bad_cast : public exception { public: bad_cast(const char * _Message = "bad cast"); bad_cast(const bad_cast &); virtual ~bad_cast(); };
以下代碼包括掉敗的 dynamic_cast 激發 bad_cast 異常的示例。
// expre_bad_cast_Exception.cpp // compile with: /EHsc /GR #include <typeinfo.h> #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(); } }
因為強迫轉換的對象 (Shape) 不是派生自指定的強迫轉換類型 (Circle),是以激發異常。若要防止此異常,請將以下聲明添加到 main:
Circle circle_instance; Circle& ref_circle = circle_instance;
然後在 try 塊中反轉強迫轉換的意義,以下所示:
Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);
【iOS用兩行代碼完善處理數據耐久化】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!