C 異常捕獲知識點總結

2021-09-09 04:36:21 字數 1202 閱讀 9491

首先來回顧一下在c語言中我們遇到類似異常的問題時候是如何處理的

c語言處理錯誤的方式?

1.assert直接終止

2.使用errno返回錯誤碼(可以在網上查詢錯誤碼庫然後檢視錯誤資訊)

3.c標準庫setjmp/longjmp(這個我沒用過,搬書的,好像現在不怎麼用了)

c++中異常的處理用到的三個關鍵字函式

throw:程式丟擲異常

catch:捕獲異常,一般擁有多個catch進行捕獲

try:將會出現異常的**段放在try中,後面通常跟著多個捕獲異常

具體使用方式不會的各類教材都寫的都很詳細,不搬書了

try和catch既然可以匹配,那我們局具體的的匹配方式是如何實現的

異常的丟擲和匹配規則

1.異常是通過丟擲物件而引發的,該物件的型別決定了應該啟用哪個catch的處理**

2.被選中的處理**是呼叫鏈中與該物件型別匹配且離丟擲異常位置最近的那乙個

3.丟擲的異常物件是乙個臨時拷貝,因這個拷貝會在catch之後被銷毀(類似於函式的return值)

4.catch(...)可以捕獲任意型別的異常,但是無法區分所以不能判斷異常的屬性(一般用來收回空間 防止記憶體洩漏)

5.匹配並不一定是完全匹配(eg:丟擲派生類的物件,使用基類捕獲)

在函式呼叫鏈中異常棧展開匹配原則

1.尋找try中的throw,並匹配catch

2.沒有匹配的catch則退出當前函式棧,繼續在呼叫函式的棧中匹配

3.如果到達main函式的棧中還是無法匹配則終止程式(此處一般會使用catch(...)用來兜底捕獲)

以上過程也可稱之為棧展開

key1.建構函式完成物件的構造和初始化,最好不要在建構函式中丟擲異常,否則可能導致物件不完整或沒有完全初始化

2.析構函式主要完成資源的清理,最好不要在析構函式內丟擲異常,否則可能導致資源洩漏

c++中異常的優缺點優:

1.相對於錯誤碼可以準確的展示出錯誤的各種資訊,幫助定位bug

2.返回錯誤碼的方式需要層層返回,影響效率,但是異常的出現會直接匹配catch

缺:1.catch機制導致程式的執行流亂跳

2.效能開銷

3.容易導致記憶體洩漏

4.自定義異常會導致混亂

C 基礎知識點 異常捕獲

語法上沒有錯誤,在程式執行的過程當中,由於某些原因程式出現了錯誤,不能再正常的執行。在寫程式的過程中會經常出現各種各樣的異常,如果想要程式繼續執行,在 中應該經常性的使用 try catch 來進行異常捕獲。執行過程 如果 try 中的 沒有出現異常,那麼 catch 中的 不會執行。如果 try ...

Python知識點 異常捕獲的靈活應用

異常處理 捕捉異常可以使用try except語句。try except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。語法 以下為簡單的try except else的語法 try 語句 執行別的 except ...

c 知識點總結

1 c 中判斷物件為空的幾種方式 1 先了解幾個與空型別相關的關鍵字和物件 null 關鍵字表示不引用任何物件的空引用,它是所有引用型別變數的預設值,在2.0版本之前也就只有引用變數型別可以為null,如 string a null 但在c 2.0版本之後,net也引入了可以為null的值型別,但變...