首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ 標準異常類別 exception 體系全景解析

     編輯:C++ 基礎

捕獲所有標準異常的統一入口

try {
    // 可能拋出標準異常
} catch (exception& e) { // 以引用捕獲,避免物件切割與拷貝開銷
    // e.what() 取得錯誤描述字串
}

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() 回傳字串格式由編譯器實作定義,僅供參考,不可依賴特定格式。

標準異常繼承樹

exception
├── logic_error        (邏輯錯誤,理論上可預防)
│   ├── length_error   (超過最大長度,如 vector::resize)
│   ├── domain_error   (數學定義域錯誤,如 sqrt(-1))
│   ├── out_of_range   (超出有效範圍,如 vector::at)
│   └── invalid_argument (參數不合法,如 string 建構 bitset 含非 0/1)
├── runtime_error      (執行期錯誤,難預防)
│   ├── range_error    (計算結果超出有意義範圍)
│   ├── overflow_error (算術上溢)
│   └── underflow_error (算術下溢)
├── bad_alloc          (new/new[] 記憶體配置失敗)
├── bad_typeid         (typeid 作用於帶虛函式類別的 null 指標)
├── bad_cast           (dynamic_cast 參考轉型失敗)
├── ios_base::failure  (I/O 操作失敗)
└── bad_exception      (特殊:異常規范違例時的替身)

實戰捕獲策略

try {
    // 代碼
} catch (const bad_alloc& e) {
    // 專門處理記憶體不足
} catch (const logic_error& e) {
    // 統一處理邏輯錯誤族群
} catch (const exception& e) {
    // 兜底:捕獲所有其他標準異常
} catch (...) {
    // 捕獲非標準異常 (C 風格、作業系統信號等)
}

關鍵提醒

  • 以 引用捕獲:防止物件切割、保留多態行為、避免拷貝
  • what() 僅供診斷,勿用於邏輯判斷
  • 標準庫容器常拋出 out_of_range、length_error、invalid_argument
  • bad_alloc 記得處理,否則預設終止程式

總結

掌握 exception 繼承體系,能實現「精準捕獲已知異常、分層處理同類錯誤、兜底不漏異常」的健壯異常處理架構,是 C++ 專業級錯誤處理的基石。

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved