Posted on 2007-11-26 21:57
lymons 閱讀(1554)
評論(0) 編輯 收藏 引用 所屬分類:
C++
13.16 標準庫異常層次
經驗表明,異常是可以分類的。C++草案標準提供了標準庫異常層次。這個層次以基類excephon開始(在頭文件<exception>中定義),該基類提供服務what(),在每個派生類中重定義,發出相應的錯誤消息。
從基類exception可以派生直接派生類runtime_error和Iogic_error(都在頭文件<stdexcept>中定義),每個派生類又可以派生其他類。
從exception中還可以派生由于C++語言特性而拋出的異常,例如,new拋出bad_alloc(13.14節).dynamic_cast拋出bad_cast(第 2l章),typeid拋出bad_typeid(第21章)。如果發生意外異常時,通過在函數的拋出表中加上std::bad_exeeption, unexpected()拋出bad_exception而不是(默認)終止程序或調用set_unexpected指定的另一函數。
logic_error類是幾個標準異常類的基類,表示程序邏輯中的錯誤,可以通過編寫正確的代碼來防止。下面介紹其中的一些類。 invalid_argument類表示向函數傳入無效參數(可以通過編寫正確的代碼來防止)。length_error類表示長度大于所操作對象允許的最大長度(第19章處理string時會拋出length_error異常)。out_of_range類表示數組和string下標之糞的值超界。
runtime_error類是幾個其他異常類的基類,表示程序中只能在執行時發現的錯誤。overflow_error類表示發生運算上溢錯誤;underflow_error類表示發生運算下溢錯誤。
標準庫異常類
C++標準庫異常類定義在四個頭文件中:
1) <exception>頭文件中定義了異常類exception;
2) <stdexcept>頭文件中定義了幾種常見的異常類。
3) <new>頭文件中定義了bad-alloc異常類。當new無法分配內存時將拋出該異常類對象。
4) <type_info>頭文件中定義了bad_cast異常類。當dynamic_cast失敗時將拋出該異常類對象。
標準異常類之間的關系:exception派生出runtime_error類、logic_error類、bad_cast類和bad_alloc類。由runtime_error派生出 range_error、overflow_error、underflow_error;由logic_error派生出domain_error、 invalid_argument、length_error、out_of_range。