c++標准異常類別


語言本身或標准程序庫所拋出的所有異常,都派生自基類exception。所有這些標准異常可分為三組:(1)語言本身支持的異常;(2)c++標准程序庫發出的異常;(3)程序作用域(scope of a program)之外發生的異常。

 

1. 語言本身支持的異常

此類異常用以支撐某些語言特性。

(1)new操作失敗,會拋出bad_alloc異常(new的nothrow版本另當別論)。

(2)執行期間,當一個作用於reference身上的“動態型別轉換操作”失敗時,dynamic_cast會拋出bad_cast異常。

(3)執行期型別辨識(RTTI)過程中,如果交給typeid的參數為零或空指針,typeid操作符會拋出bad_typeid異常。

(4)如果發生非預期的異常(函數拋出異常規格(exception specification)以外的異常),bad_exception異常會接手處理,bad_exception會調用unexpected(),后者通常會喚起terminate()終止程序。

class E1;
class E2; // not derived from E1
void f() throw(E1) // throws only exceptions of type E1
{
  …
  throw E1(); // throws exception of type E1
throw E2(); // calls unexpected(), which calls terminate()
}

如果異常規格羅列了bad_exception,那么任何未列於規格的異常,都將在函數unexpected()中重新拋出(rethrows)bad_exception。

2. c++標准程序庫發出的異常

c++標准程序庫異常總是派生自logic_error。

(1)invalid_argument表示無效參數,例如將bitset(array of bits)以char而非“0”或“1”進行初始化。

(2)length_error指出某個行為“可能超越了最大極限”,例如對某個字符串附加太多字符。

(3)out_of_range指出參數值“不在預期范圍內”,例如在處理容器或string中采用一個錯誤索引。

(4)domain_error指出專業領域范疇內的錯誤。

此外,標准程序庫的IO部分提供一個名為ios_base::failure的特殊異常,當數據流由於錯誤或者到達文件末尾而發生狀態改變時,就可能拋出這個異常。

3. 程序作用域(scope of a program)之外發生的異常

派生自runtime_error的異常,用來指出“不在程序范圍內,且不容易回避”的事件。c++標准程序庫針對執行期錯誤提供以下三個class:

(1)range_error指出內部計算時發生區間錯誤。

(2)overflow_error指出算術運算發生上溢位。

(3)underflow_error指出算術運算發生下溢位。

基礎類別exception和badexception定義於<exception>。bad_alloc定義於<new>。bad_cast和bad_typeid定義於<typeinfo>。ios_base::failure定義於<ios>。其他異常類別定義於<stdexcept>。

【學習資料】 《c++標准程序庫》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM