C++給我們提供了標(biāo)準(zhǔn)的異常處理類,它用來拋出C++標(biāo)準(zhǔn)庫中函數(shù)執(zhí)行時的異常。C++提供的標(biāo)準(zhǔn)異常類的層次結(jié)構(gòu)如圖:
可以看到,所有的異常類都繼承自exception基類,exception類下的logic_error和runtime_error又是兩個比較大類,包含有多個自類,它們分表代表邏輯類錯誤和運行時錯誤。
舉例說明,如:
1. 我們使用new開辟內(nèi)存時,如果遇到空間不足,則會拋出bad_alloc異常。
2. 我們使用dynamic_cast()進行動態(tài)類型轉(zhuǎn)化失敗時,則拋出bad_typeid異常。
3. 我們在計算數(shù)值超過該類型表示的最大范圍時,則拋出overflow_error異常,表示運算上溢,同理,underflow_error表示運算下溢。
4. 我們在使用string類下標(biāo)但越界時,則拋出out_of_range異常。
等等...等等... 請大家自行了解更多。
需要注意的是,使用C++自帶的標(biāo)準(zhǔn)異常類,需要包含對應(yīng)的頭文件,因為exception、bad_exception類在頭文件exception中定義,bad_alloc類在頭文件new中定義,bad_typeid類在頭文件typeinfo中定義,ios_base::failure類在頭文件ios中定義,其他異常類在stdexcept中定義。
下面,給大家展示如何使用C++標(biāo)準(zhǔn)異常類:
#include <iostream> #include<new> #include<stdexcept> using namespace std; //異常處理 int main() { string *s; try { s=new string("www.sztianhecheng.cn"); cout<<s->substr(15,5); } catch(bad_alloc &t) { cout<<"Exception occurred:"<<t.what()<<endl; } catch(out_of_range &t) { cout<<"Exception occurred:"<<t.what()<<endl; } return 0; }
運行結(jié)果如下圖:
請大家自行上機試驗學(xué)習(xí)使用方法!
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程