C++ 標准異常的基類:exception類


1、簡介

  C++語言本身或者標准庫拋出的異常都是exception的子類,稱為標准異常。捕獲所有的標准異常的語句:

try{
    //可能拋出異常的語句
}catch(exception &e)  //使用引用是為了提高效率,不然需要經過一次對象拷貝過程。
{
    //處理異常的語句
}

1.1 exception類

  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函數返回一個能識別異常的字符串,可以告訴程序員這是什么異常,但是C++標准並沒有規定這個字符串的格式,各個編譯器的實現也不同,因此what的返回值僅供參考。

1.2 exception類的繼承層次

 

 

1.2.1 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 類型。

1.2.2 logic_error的派生類

異常名稱

說  明

length_error

試圖生成一個超出該類型最大長度的對象時拋出該異常,例如 vector 的 resize 操作。

domain_error

參數的值域錯誤,主要用在數學函數中,例如使用一個負值調用只能操作非負數的函數。

out_of_range

超出有效范圍。

invalid_argument

參數不合適。在標准庫中,當利用string對象構造 bitset 時,而 string 中的字符不是 0 或1 的時候,拋出該異常。

1.2.3 runtime_error的派生類

異常名稱

說  明

range_error

計算結果超出了有意義的值域范圍。

overflow_error

算術計算上溢。

underflow_error

算術計算下溢。


免責聲明!

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



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