C 深度解析 46 C 中的異常處理(上)

2021-10-03 09:48:57 字數 2816 閱讀 4943

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...