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

C++ 異常處理入門:try-catch 機制、拋出傳播與錯誤分類

     編輯:C++ 基礎

程式錯誤三分類

  1. 語法錯誤:編譯期發現,最易修復
  2. 邏輯錯誤:功能不符預期,除錯解決
  3. 執行期錯誤:除零、記憶體耗盡、越界、檔案不存在 → 異常機制解決

異常處理流程

拋出 → 檢測 → 捕獲
throw → try   → catch

基礎語法

try {
    // 可能拋出異常的代碼
} catch (ExceptionType& e) {
    // 處理異常
}
  • try 區塊:監測異常拋出
  • catch 區塊:匹配類型並處理
  • 若 try 無異常拋出,catch 不執行

關鍵認知:必須顯式拋出

string s = "abc";
char c1 = s[100];      // 未檢查,Undefined Behavior,程式可能崩潰
char c2 = s.at(100);   // 檢查越界,拋出 out_of_range 異常

at() 拋出異常,[] 不拋出。無拋出 = 無捕獲,即使有錯誤 try 也檢測不到。

捕獲標準異常範例

string s = "https://c.biancheng.net";
try {
    char c = s.at(100);  // 拋出 out_of_range
} catch (exception& e) { // 捕獲所有標準異常
    cout << "[2] out of bound!" << endl;
}

執行流直接跳轉到 catch,拋出點之後的 try 區塊代碼永不執行。catch 結束後,程式繼續執行 catch 之後的代碼。

異常傳播:穿透呼叫堆疊

void inner() { throw "error"; }
void outer() { inner(); cout << "outer after"; } // 不執行
int main() {
    try { outer(); cout << "main after"; } // 不執行
    catch (const char* e) { cout << e; }   // 輸出 error
}

異常沿呼叫鏈向上傳播,中間函數未捕獲則自動穿透,未執行代碼全部跳過。

直接拋出異常

try {
    throw "Unknown Exception"; // 手動拋出字串字面值
} catch (const char* e) {
    cout << e; // Unknown Exception
}

健康提醒

長期熬夜寫代碼易誘發神經衰弱、失眠。程序員請注意勞逸結合、多運動、陪伴家人,身體是革命本錢。

總結

異常機制給程式「起死回生」機會:顯式拋出 → try 檢測 → catch 處理 → 繼續執行。掌握「必須拋出才能捕獲」「傳播穿透呼叫鏈」「執行流跳轉不返回」三大核心行為,即可從容應對執行期錯誤。

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