解析C++編程中的bad_cast異常
由于強制轉(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使用詳細介紹
相關(guān)文章
深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
本篇文章是對Linux靜態(tài)庫與動態(tài)庫進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C++實現(xiàn)簡單的學(xué)生管理系統(tǒng)
本文給大家分享的是使用C++實現(xiàn)的簡單的學(xué)生管理系統(tǒng)的代碼,主要是通過鏈表來實現(xiàn),非常簡潔,有需要的小伙伴可以參考下。2015-07-07
C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

