解析C++編程中的bad_cast異常
由于強(qiáng)制轉(zhuǎn)換為引用類(lèi)型失敗,dynamic_cast 運(yùn)算符引發(fā) bad_cast 異常。
語(yǔ)法
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();
}
}
由于強(qiáng)制轉(zhuǎn)換的對(duì)象 (Shape) 不是派生自指定的強(qiáng)制轉(zhuǎn)換類(lèi)型 (Circle),因此引發(fā)異常。若要避免此異常,請(qǐng)將下列聲明添加到 main:
Circle circle_instance; Circle& ref_circle = circle_instance;
然后在 try 塊中反轉(zhuǎn)強(qiáng)制轉(zhuǎn)換的意義,如下所示:
Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);
- C++使用boost::lexical_cast進(jìn)行數(shù)值轉(zhuǎn)換
- C++強(qiáng)制類(lèi)型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_cast)
- c++中的const_cast用法大全
- C++中的類(lèi)型轉(zhuǎn)換static_cast、dynamic_cast、const_cast和reinterpret_cast總結(jié)
- c++ dynamic_cast與static_cast使用方法示例
- C++中4種類(lèi)型轉(zhuǎn)換方式 cast操作詳解
- C++ 中dynamic_cast<>的使用方法小結(jié)
- C++四種cast使用詳細(xì)介紹
相關(guān)文章
Sersync+Rsync實(shí)現(xiàn)觸發(fā)式文件同步實(shí)戰(zhàn)過(guò)程
sersync是使用c++編寫(xiě),而且對(duì)linux系統(tǒng)文 件系統(tǒng)產(chǎn)生的臨時(shí)文件和重復(fù)的文件操作進(jìn)行過(guò)濾。下面通過(guò)本文給大家分享Sersync+Rsync實(shí)現(xiàn)觸發(fā)式文件同步實(shí)戰(zhàn)過(guò)程,需要的朋友參考下吧2017-09-09
c++如何控制對(duì)象的創(chuàng)建方式(禁止創(chuàng)建棧對(duì)象or堆對(duì)象)和創(chuàng)建的數(shù)量
這篇文章主要介紹了c++如何控制對(duì)象的創(chuàng)建方式和創(chuàng)建的數(shù)量,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
C語(yǔ)言多媒體框架GStreamer入門(mén)和概述
這篇文章主要介紹了C語(yǔ)言多媒體開(kāi)源框架GStreamer,本文總結(jié)了多媒體框架GStreamer一些基本概念及流程,希望能給使用GStreamer開(kāi)源庫(kù)的朋友提供一個(gè)借鑒或參考,需要的朋友可以參考下2022-07-07
VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟
因?yàn)閂SCode免費(fèi)且好用,可以安裝各種插件,本文主要介紹了VSCode搭建STM32開(kāi)發(fā)環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
C語(yǔ)言二叉樹(shù)常見(jiàn)操作詳解【前序,中序,后序,層次遍歷及非遞歸查找,統(tǒng)計(jì)個(gè)數(shù),比較,求深度】
這篇文章主要介紹了C語(yǔ)言二叉樹(shù)常見(jiàn)操作,結(jié)合實(shí)例形式詳細(xì)分析了基于C語(yǔ)言的二叉樹(shù)前序,中序,后序,層次遍歷及非遞歸查找,統(tǒng)計(jì)個(gè)數(shù),比較,求深度等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04
zlib庫(kù)壓縮和解壓字符串STL string的實(shí)例詳解
這篇文章主要介紹了zlib庫(kù)壓縮和解壓字符串STL string的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10
C語(yǔ)言調(diào)用攝像頭實(shí)現(xiàn)生成yuv未壓縮圖片
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何調(diào)用攝像頭實(shí)現(xiàn)生成yuv未壓縮圖片,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以參考一下2023-11-11

