程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++ exception類

C++ exception類

編輯:C++基礎知識
C++語言本身或者標准庫拋出的異常都是 exception 的子類,稱為標准異常(Standard Exception)。你可以通過下面的語句來捕獲所有的標准異常:
try{
    //可能拋出異常的語句
}catch(exception &e){
    //處理異常的語句
}
之所以使用引用,是為了提高效率。如果不使用引用,就要經歷一次對象拷貝(要調用拷貝構造函數)的過程。

exception 類位於 <exception> 頭文件中,它被聲明為:
class exception{
public:
    exception () throw();  //構造函數
    exception (const exception&) throw();  //拷貝構造函數
    exception& operator= (const exception&) throw();  //運算符重載
    virtual ~exception() throw();  //虛析構函數
    virtual const char* what() const throw();  //虛函數
}
這裡需要說明的是 what() 函數。what() 函數返回一個能識別異常的字符串,正如它的名字“what”一樣,可以粗略地告訴你這是什麼異常。不過C++標准並沒有規定這個字符串的格式,各個編譯器的實現也不同,所以 what() 的返回值僅供參考。

下圖展示了 exception 類的繼承層次:
圖:exception 類的繼承層次以及它們所對應的頭文件
先來看一下 exception 類的直接派生類: 異常名稱 說  明 logic_error 邏輯錯誤。 runtime_error 運行時錯誤。 bad_alloc 使用 new 或 new[ ] 分配內存失敗時拋出的異常。 bad_typeid 使用 typeid 操作一個 NULL 指針,而且該指針是帶有虛函數的類,這時拋出 bad_typeid 異常。 bad_cast 使用 dynamic_cast 轉換失敗時拋出的異常。 ios_base::failure io 過程中出現的異常。 bad_exception 這是個特殊的異常,如果函數的異常列表裡聲明了 bad_exception 異常,當函數內部拋出了異常列表中沒有的異常時,如果調用的 unexpected() 函數中拋出了異常,不論什麼類型,都會被替換為 bad_exception 類型。    logic_error 的派生類: 
異常名稱 說  明 length_error 試圖生成一個超出該類型最大長度的對象時拋出該異常,例如 vector 的 resize 操作。 domain_error 參數的值域錯誤,主要用在數學函數中,例如使用一個負值調用只能操作非負數的函數。 out_of_range 超出有效范圍。 invalid_argument 參數不合適。在標准庫中,當利用string對象構造 bitset 時,而 string 中的字符不是 0 或1 的時候,拋出該異常。
runtime_error 的派生類: 
異常名稱 說  明 range_error 計算結果超出了有意義的值域范圍。 overflow_error 算術計算上溢。 underflow_error 算術計算下溢。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved