C++異常重拋出實(shí)例分析
如果我們編寫了一個(gè)函數(shù),函數(shù)內(nèi)部可能會(huì)出現(xiàn)異常,但是我們不想在這個(gè)函數(shù)內(nèi)處理,而是想要通知調(diào)用者,那么C++允許它重拋出這個(gè)異常。語法如下:
try {
//Execute some code
} catch (Exception& e) {
//Peform some operations before exits
throw;
}
語句throw重新拋出了異常。
看一個(gè)實(shí)際的例子:
#include <iostream>
#include <stdexcept>
using namespace std;
int f(){
try{
throw runtime_error("Exception in f");
} catch(exception& e){
cout << "Exception caught in f" << endl;
cout << e.what() << endl;
throw;
}
}
int main()
{
try{
f();
} catch(exception& e){
cout << "Exception caught in main" << endl;
cout << e.what() << endl;
}
return 0;
}
運(yùn)行結(jié)果:

知識(shí)點(diǎn)擴(kuò)展:
c++重新拋出異常
有可能單個(gè)catch不能完全處理一個(gè)異常,此時(shí)在進(jìn)行了一些處理工作之后,需要將異常重新拋出,由函數(shù)調(diào)用鏈中更上層的函數(shù)來處理。重新拋出由“throw;”語句實(shí)現(xiàn),throw后不跟表達(dá)式或類型。
“throw;”將重新拋出異常對(duì)象,它只能出現(xiàn)在catch或catch調(diào)用的函數(shù)中,如果出現(xiàn)在其它地方,會(huì)導(dǎo)致調(diào)用terminate函數(shù)。
被重新拋出的異常是原來的異常對(duì)象,不是catch形參。該異常類型取決于異常對(duì)象的動(dòng)態(tài)類型,而不是catch形參的靜態(tài)類型。比如來自基類類型形參catch的重新拋出,可能實(shí)際拋出的是一個(gè)派生類對(duì)象。
只有當(dāng)異常說明符是引用時(shí),在catch中對(duì)形參的改變,才會(huì)傳播到重新拋出的異常對(duì)象中。
catch (my_error & eObj) {
eObj.status = severeErr;
throw; // the status member of the exception object is severeErr
} catch (other_error eObj) {
eObj.status = badErr;
throw; // the status member of the exception rethrown is unchanged
}
以上就是C++異常重拋出實(shí)例分析的詳細(xì)內(nèi)容,更多關(guān)于C++異常重拋出的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換成int整形值的示例
今天小編就為大家分享一篇關(guān)于C++實(shí)現(xiàn)十六進(jìn)制字符串轉(zhuǎn)換成int整形值的示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
C語言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析
C語言結(jié)構(gòu)體對(duì)齊也是老生常談的話題了,基本上是面試題的必考題,這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體與內(nèi)存對(duì)齊的相關(guān)資料,需要的朋友可以參考下2021-07-07
Qt為exe添加ico圖片的簡(jiǎn)單實(shí)現(xiàn)步驟
這篇文章主要給大家介紹了關(guān)于Qt為exe添加ico圖片的簡(jiǎn)單實(shí)現(xiàn)步驟,通過文中介紹的方法可以幫助大家實(shí)現(xiàn)這個(gè)自定義exe圖標(biāo)的效果,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

