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定義於。bad_alloc定義於。bad_cast和bad_typeid定義於。ios_base::failure定義於。其他異常類別定義於。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章