C 異常的使用

2021-10-04 05:20:59 字數 1289 閱讀 4190

1. 為什麼c++引進了異常概念

c語言中處理錯誤的方法有:

終止程式,如assert。但是因為某個函式出錯而讓整個程式終止,這樣使用者是難以接受的

返回錯誤碼,缺陷:需要程式設計師自己去查詢對應的錯誤,維護成本高

c 標準庫中setjmp和longjmp

為了解決c語言這些不太友好的錯誤處理機制,c++才引入了異常,異常也是一種處理錯誤的方法:當乙個函式遇到錯誤時會丟擲異常,讓函式的直接或間接呼叫者去處理

2. 異常的使用

3. 異常的處理流程

因為被丟擲的物件的生命週期是不知道的,所以被丟擲的實際上是異常物件的拷貝

當異常物件被丟擲後,退出當前函式棧,返回到上一層函式當中,依次向下尋找匹配的catch塊

如果找到了匹配的catch塊,則會執行catch塊中的異常處理方法,如果沒有找到,則會向將異常丟擲給上一層函式。特別的,如果main函式中的異常沒有被處理則會報錯

catch(…)可以捕獲任意型別的異常

可以丟擲的派生類物件,使用基類捕獲(實際運用中常採用這種方法)

處理完異常後會跳過其他catch塊執行後面的語句

寫乙個**演示一下:

int

division

(int left,

int right)

return left / right;

}void

func

(int left,

int right)

catch

(std::string &s)

catch(.

..) cout <<

"delete "

<< array << endl;

delete

array;

}int

main()

catch

(std::string s)

catch(.

..)return0;

}

division函式丟擲異常後,func中的catch對該異常進行捕獲,並執行catch語句塊,該語句又丟擲了乙個異常給main函式處理,main函式處理完後程式退出,

在這過程中並沒有釋放array的空間

4. 異常安全

5. 異常規範

函式名 throw(型別表),列出這個函式可能拋擲的所有異常型別

函式的後面接throw(),表示函式不拋異常

若無異常介面宣告,則此函式可以拋擲任何型別的異常

注:即使函式後面接了throw(),函式也可以拋異常,所以這只是一種程式設計規範

C 異常捕獲使用

一.異常 c語言 一般使用函式的返回值來表示是否出錯.c 語言 使用異常機制進行處理 異常語法 1 異常捕獲 trycatch 異常型別 名字 catch 異常型別2 名字2 可以有多個catch 分支 2 異常丟擲 throw 異常物件 異常型別 異常捕獲 void config void 注意 ...

C 異常使用須知

本文翻譯自 相比錯誤 異常為錯誤處理提供了很多便利。這些好處包括 儘管有這些好處,然而大部分人仍然介懷異常的額外開銷而不願意使用。基於異常的實現機制,額外開銷來自兩方面 時間開銷 增加執行時間 和空間開銷 增加可執行檔案和記憶體消耗 在這二者之中,時間開銷更被關注。然而,對於乙個良好的c 異常實現,...

C 異常處理 使用throw引發異常

c 提供了throw語句來引發異常。使用throw語句既可以引發系統異常,也可以引發自定義異常。使用throw語句丟擲異常的語法如下 throw exobject exobject 所要丟擲的異常物件,這個異常物件是派生自system.exception類的類物件。例項 如下 using syste...