解析C++編程中的bad_cast異常
更新時間:2016年01月15日 16:14:55 投稿:goldensun
這篇文章主要介紹了C++編程中的bad_cast異常,bad_cast異常通常出現(xiàn)于表達式中類型轉(zhuǎn)換錯誤時等一些場景,需要的朋友可以參考下
由于強制轉(zhuǎn)換為引用類型失敗,dynamic_cast 運算符引發(fā) 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 引發(fā) 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(); } }
由于強制轉(zhuǎn)換的對象 (Shape) 不是派生自指定的強制轉(zhuǎn)換類型 (Circle),因此引發(fā)異常。若要避免此異常,請將下列聲明添加到 main:
Circle circle_instance; Circle& ref_circle = circle_instance;
然后在 try 塊中反轉(zhuǎn)強制轉(zhuǎn)換的意義,如下所示:
Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);
您可能感興趣的文章:
- C++使用boost::lexical_cast進行數(shù)值轉(zhuǎn)換
- C++強制類型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_cast)
- c++中的const_cast用法大全
- C++中的類型轉(zhuǎn)換static_cast、dynamic_cast、const_cast和reinterpret_cast總結(jié)
- c++ dynamic_cast與static_cast使用方法示例
- C++中4種類型轉(zhuǎn)換方式 cast操作詳解
- C++ 中dynamic_cast<>的使用方法小結(jié)
- C++四種cast使用詳細介紹
相關文章
深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
本篇文章是對Linux靜態(tài)庫與動態(tài)庫進行了詳細的分析介紹,需要的朋友參考下2013-05-05C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02