C 異常機制

2021-10-03 01:39:46 字數 1682 閱讀 3798

異常的優點

函式的返回值可以忽略,但異常不可以,從而有助於我們捕獲錯誤

整形返回值沒有任何語義資訊,不容易判斷錯誤型別。而異常卻包含語義資訊,容易找出錯誤

整形返回值缺乏上下文資訊,異常作為乙個類,可以擁有自己的成員,這些成員可以傳遞足夠的資訊

異常處理可以在呼叫跳級

#include

using

namespace std;

//異常基本語法

intdivide

(int a,

int b)

return a / b;

}void

text1()

//捕獲異常並處理

catch

(int)}

void

text2()

//捕獲異常並處理

//catch(...)表示捕獲所有異常

catch

(int e)}/*

可以看到在calldivide()函式中並沒有異常處理機制

但是執行環境,錯誤還是**獲了

因為c++的異常處理機制是跨函式的

當乙個異常被丟擲,就會逐層向上傳遞,直到被處理機制處理

如果最後也沒有處理異常,程式就會掛機,無法正常執行

這也說明了c++的異常是必須處理的

*/void

calldivide

(int a,

int b)

void

text3()

catch

(int e)

}int

main()

在捕獲異常後,try語句塊內的**定義的區域性變數,都會自動呼叫析構函式被析構
#include

using

namespace std;

class

person

~person()

};intdivide

(int a,

int b)

return a / b;

}void

text()

//捕獲異常並處理

catch

(int e)

}int

main()

#####執行結果

物件構建!

物件構建!

物件析構!

物件析構!

異常捕獲

為了加強程式的可讀性,可以函式宣告中列出可能丟擲異常的所有型別。例如:
void

func()

throw

(int

,float

,char

)//表示該函式只能丟擲以上三種型別的異常

void

func()

throw()

//表示不能丟擲任何異常

void

func()

//可以丟擲所有異常

throw的異常時有型別的,可以是數字,字串,類物件,catch需嚴格匹配異常型別

普通型別元素,呼叫拷貝構造異常物件catch處理完後就析構

引用型別物件,不會呼叫拷貝構造,異常處理完就析構

利用指標物件,不能使用棧記憶體構造物件,需要使用堆記憶體(new)建立物件,防止物件先析構,再處理異常

C 異常 異常機制

c 異常是丟程式執行過程中發生的異常情況 例如被0除 的一種響應。異常提供了將控制權從程式的乙個部分傳遞到另一部分的途徑。對異常的處理有3個組成部分 引發異常 使用處理程式捕獲異常 使用try塊。程式在出現問題時將引發異常。throw語句實際上是跳轉,即命令程式跳到另一條語句。throw關鍵字表示引...

C 異常機制

在c 中的函式呼叫中,是用棧來存放其中資料物件。表1.1 我們結合這張表,來簡單介紹函式的棧結構。其中每乙個函式在入棧的時候,編譯器會自動新增額外的資料結構,這裡的exception registration就是被額外新增進來的。對於這個結構體我們稍後解釋,首先來介紹函式的基本結構。從這張圖中可以清...

C 異常機制

一 簡單例項 異常是通過丟擲物件而引發的,丟擲物件的型別決定應該啟用那個處理 即catch中的語句 被處理 是呼叫鏈中與該丟擲物件型別匹配,並且離丟擲異常位置最近的那乙個 例如 void test int main catch string e t value void print void pus...