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

C++ 異常類型與多重 catch 機制:匹配規則、類型轉換與最佳實踐

     編輯:C++ 基礎

catch 參數解析

catch (ExceptionType variable) // variable 可省略,僅匹配類型
// 相當於函數參數:運行期匹配,而非編譯期檢查
  • ExceptionType:可為基本型別、指標、陣列、類別等任意型別
  • 標準庫異常皆繼承 std::exception
  • 以引用捕獲避免切割與拷貝

多重 catch 匹配順序:從上到下,第一個匹配生效

try { throw Derived(); }
catch (int) { ... }
catch (char*) { ... }
catch (Base) { ... }      // ← 匹配成功!向上轉型
catch (Derived) { ... }    // 永不執行

關鍵:catch(Base) 捕獲 Derived 異常 → 向上轉型 發生在匹配階段。

catch 允許的類型轉換 (受限)

禁止:算術轉換 (int→float)、使用者定義轉換、const_cast/reinterpret_cast 等。

實戰演示:陣列退化 + const 轉換

int nums[] = {1,2,3};
throw nums;                    // 型別 int[3]
catch (const int*) { ... }     // 匹配:int[3] → int* → const int*

捕獲順序黃金法則

  1. 派生類在前,基類在後:否則基類攔截所有派生異常
  2. 具體異常在前,通用異常在後:bad_alloc 前於 exception
  3. 參考捕獲:catch (const ExceptionType& e)
  4. 兜底捕獲:catch (...) 放最後,記錄未知異常並重拋或安全退出

異常物件生命週期

  • 拋出時建立臨時物件 (複製/移動語意)
  • 捕獲引用參數綁定至該臨時物件
  • catch 區塊結束時銷毀
  • throw; 重拋時保留原物件 (不再複製)

總結

理解 匹配順序優先、向上轉型可匹配、轉換規則受限** 三大核心機制,配合「派生前基後、具體前通用後、引用捕獲、兜底處理」四大鐵律,即能構建精準、高效、可維護的異常處理網。

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved
    轉換類型範例說明
    向上轉型Derived → Base公開繼承,保留多態
    const 轉換int* → const int*增加 const 資格
    陣列/函數退化int[3] → int*非引用參數自動退化