C++ exception类
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                C++ exception类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            ++語言本身或者標準庫拋出的異常都是 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() 的返回值僅供參考。
 
 
 
 
 
?logic_error 的派生類:?
 
 
runtime_error 的派生類:?
 
 
 
                            
                        
                        
                        exception 類位于 <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 類型。 | 
| length_error | 試圖生成一個超出該類型最大長度的對象時拋出該異常,例如 vector 的 resize 操作。 | 
| domain_error | 參數的值域錯誤,主要用在數學函數中,例如使用一個負值調用只能操作非負數的函數。 | 
| out_of_range | 超出有效范圍。 | 
| invalid_argument | 參數不合適。在標準庫中,當利用string對象構造 bitset 時,而 string 中的字符不是 ’0’ 或 ’1’ 的時候,拋出該異常。 | 
runtime_error 的派生類:?
| range_error | 計算結果超出了有意義的值域范圍。 | 
| overflow_error | 算術計算上溢。 | 
| underflow_error | 算術計算下溢。 | 
總結
以上是生活随笔為你收集整理的C++ exception类的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: C++ throw:抛出自己的异常
 - 下一篇: Android之mediarecorde