4 小結
程式在執行過程中可能產生異常,異常與 bug 的區別在於,異常是程式執行時可預料的執行分支,bug 是程式中的錯誤,是不被預期的執行方式。下面列舉幾個常見的異常與 bug。異常
bugc++ 內建了異常處理的語法元素 try…catch…
c++ 通過 throw 語句丟擲異常資訊
舉例如下:
divide 中 throw 丟擲的異常會被 try…catch… 捕獲
throw 丟擲的異常必須被 catch 處理,當前函式能夠處理異常,程式繼續往下執行,當前函式函式無法處理異常,則函式停止執行,並返回。未被處理的異常會順著函式呼叫棧向上傳播,直到被處理為止,否則程式將被停止執行。
程式設計實驗:c++異常處理初探
// 46-1.cpp
#include
#include
using
namespace std;
double
divide
(double a,
double b)
else
return ret;
}int
main
(int argc,
char
*ar**)
catch(.
..)return0;
}
程式首先執行 try 內中的**,divide 函式中的 throw 丟擲異常,該函式中沒有 catch 捕獲異常,返回到 main 函式中,被 catch 捕獲。
編譯執行:
$ g++ 46-1.cpp -o 46-1
$ ./46-1
divide by zero...
同乙個 try 語句可以跟上多個 catch 語句。
catch(…) 必須要放在最後,自上而下要嚴格匹配,包括 const 屬性。
程式設計實驗:異常型別匹配
// 46-2.cpp
#include
using
namespace std;
void
demo1()
catch
(char c)
catch
(short c)
catch
(double c)
catch(.
..)}
void
demo2()
intmain()
catch
(char
* s)
catch
(const
char
* cs)
catch
(string ss)
return0;
}
函式 demo1 中的異常在函式中被 catch 捕獲,有四個 catch,分別捕獲 char,short,double,和其他所有型別。
demo2 中的異常返回到 main 函式中才**獲,異常處理必須嚴格匹配,包括 const 屬性,丟擲的異常 「error」 被 catch(const char* cs) 捕獲。要被 catch(string ss) 捕獲,需要 throw string(「error」);
$ g++ 46-2.cpp -o 46-2
$ ./46-2
catch(char c)
catch(const char* cs)
下面的**寫法是正確的
下面的**指出函式可能丟擲的異常型別為 int
程式設計實驗:try…catch分割**,throw 指定異常型別
// 46-1.cpp
#include
using
namespace std;
intfunc
(int i,
int j)
throw
(int
,char
)// 指定可以丟擲int和char異常
else
}void
test
(int i)
try// try…catch 用於分割正常**與異常**
catch
(int i)
catch(.
..)int
main
(int argc,
char
* ar**)
編譯執行:
func(i, i) = 8
exception...
1、try…catch…是 c++ 中異常處理的專用語句
2、try 語句處理正常**邏輯,catch 語句處理異常**邏輯
3、同乙個 try 可以跟多個 catch 語句
4、異常處理必須嚴格匹配,不進行任何的型別轉換
64 C 中的異常處理 上
目錄 1.c 異常處理 程式設計實驗 c 異常處理初探 2.異常處理的匹配規則 程式設計實驗 異常型別匹配 3.小結 c 內建了異常處理的語法元素try catch try語句處理正常 邏輯 catch語句處理異常情況 try語句中的異常由對應的catch語句處理 c 通過throw語句丟擲異常資訊...
第64課 C 中的異常處理(上)
本文內容來自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 c 異常處理 c 內建了異常處理的語法元素 try catch c 通過throw 語句丟擲異常資訊 c 異常處理分析 throw 丟擲的異常必須被 catch 處理 未被處理的異常會順著函式呼叫棧向上傳播,直到被處理為上,否則程式...
六十四課 C 中的異常處理 上
上節課我們了解了c語言的異常處理方式,也了解了c中異常處理的許多的缺陷,下面我們來學習下c 中的異常處理。看看c 中是怎麼處理異常的。1 c 中內建了異常處理的語法元素try.catch.try catch 2 c 中通過throw丟擲異常資訊 double divide double a,doub...