C++ 內置了異常處理的語法元素 try...catch...ios
- try 語句處理正常代碼邏輯
- catch 語句處理異常代碼邏輯
- try 語句中的異常由對應的 catch 語句處理
try { double r = divide(1, 0); } catch (...) { cout << "Divided by zero ..." << endl; }
- C++ 經過 throw 語句拋出異常
double divide(double a, double b) { const double delta = 0.00000000001; double ret = 0; if (!((-delta < b) && (b < delta))) { ret = a / b; } else { throw 0; // 產生除 0 異常 } return ret; }
C++ 異常處理分析編程
throw 拋出的異常必須被 catch 處理ide
- 當前函數可以處理異常,程序繼續往下執行
- 當前函數沒法處理,則函數中止執行,並返回
未被處理的異常會沿着函數調用棧向上傳播,直到被處理爲止,不然程序將中止執行。函數
編程實驗:C++異常處理初探spa
#include <iostream> using namespace std; double divide(double a, double b) { const double delta = 0.00000000001; double ret = 0; if (!((-delta < b) && (b < delta))) { ret = a / b; } else { throw 0; // 產生除 0 異常 } return ret; } int main() { cout << "main() begin" << endl; try { double r = divide(1, 0); cout << r << endl; } catch(...) { cout << "Divided by zero ..." << endl; } cout << "main() end" << endl; return 0; }
輸出:code
main() begin Divided by zero ... main() end
同一個 try 語句能夠跟上多個 catch 語句blog
- catch 語句能夠定義具體處理的異常類型
- 不一樣異常的類型由不一樣的 catch 語句負責處理
- try 語句中能夠拋出任何類型的異常
- 任何異常只能被捕獲(catch)一次
- 異常處理的匹配規則
編程實驗:異常類型匹配it
#include <iostream> using namespace std; void Demo1() { try { throw 'c'; } catch (int i) { cout << "catch (int i)" << endl; } catch (double d) { cout << "catch (double d)" << endl; } catch (char c) { cout << "catch (char c)" << endl; } } void Demo2() { throw "D.T.Software"; } int main() { cout << "main() begin" << endl; Demo1(); try { Demo2(); } catch (char *c) { cout << "catch (char *c)" << endl; } catch (const char *cc) { cout << "catch (const char *cc)" << endl; } catch (...) { cout << "catch (...)" << endl; } cout << "main() end" << endl; return 0; }
小結io
- C++ 中直接支持異常處理的概念
- try...catch... 是C++中異常處理的專用語句
- try 語句處理正常代碼邏輯,catch 語句處理異常狀況
- 同一個 try 語句能夠跟上多個 catch 語句
- 異常處理必須嚴格匹配,不進行任何的類型轉換
以上內容整理於狄泰軟件學院系列課程,請你們保護原創!class