程式在執行過程中可能產生異常
異常與bug對比:
-異常是程式執行時可預料的執行分支。
例: 執行時產生除0的情況
需要開啟的外部檔案不存在
陣列訪問時越界。
-bug是程式中的錯誤,是不被預期的執行方式
例: 使用野指標
堆陣列使用結束後未釋放
選擇排序無法處理長度為0的陣列
c語言經典處理方式:if…else…
void func(...)
else
}注意:c語言中的經典異常處理方式會使得程式邏輯中混入大量的處理異常的**。
正常邏輯**和異常處理**混合在一起,導致**迅速膨脹,難以維護。。。
c++中內建了異常處理的語法元素try…catch…
-try語句處理正常**邏輯,catch語句處理異常情況,try語句中的異常由對應的catch語句處理
例: try
catch(...)
c++通過throw 語句丟擲異常資訊
例:
double divide(double a, double b)
else
return ret;
}
c++異常處理分析:
throw丟擲的異常必須被catch處理,如果當前函式能夠處理異常,那麼程式繼續往下執行,
如果當前函式無法處理異常,則函式停止執行,並返回。返回到**?未被處理的異常會
順著函式呼叫棧向上傳播,直到被處理為止,否則程式將停止執行。
同乙個try語句可以跟上多個catch語句
catch語句可以定義具體函式處理的異常型別,不同型別的異常由不同的catch語句負責處理,
try語句中可以丟擲任何型別的異常,catch(...)用於所有型別的異常,任何異常都只能**獲
(catch)一次。
異常處理的匹配規則:
異常丟擲後至上而下 嚴格匹配 每乙個catch語句處理的型別。
例: try
catch(type1 t1)
catch(type1 t2)
catch(typen tn)
異常處理匹配時,不進行任何的型別轉換。也就是嚴格匹配!
catch語句中可以丟擲異常
catch中丟擲的異常需要外層的try...catch...捕獲
trycatch(int i)
catch(...)
c++中的異常處理
異常的型別可以是自定義類型別,對於類型別異常的匹配依舊是至上而下嚴格匹配,賦值相容性原則在異常
匹配中依然適用,一般而言:匹配子類異常的catch放在上部,匹配父類異常的catch放在下部。
在工程中會定義一系列的異常類,每個類代表工程中可能出現的一種異常型別,**復用時,可能需要
重解釋不同的異常類,在定義catch語句塊時推薦使用引用作為引數。
c++標準庫提供了實用異常類族,標準庫中的異常都是從exception類派生的,exception類有兩個主要的
分支,分別是:1,logic_errror,常用程式中的可以避免邏輯錯誤;2,runtime_error,常用於程式中無法
避免的惡性錯誤。
總結:後續更新。。。 異常處理機制
異常處理的三個步驟 檢查異常,丟擲異常,處理異常 異常處理基本原理 把需要檢測的程式放到try塊中,把異常處理的程式放在catch塊中。如果執行乙個函式出現了異常,可以丟擲異常資訊。然後查詢try塊下面的catch塊是否可以處理該異常。如果該函式不處理該異常,將傳遞給它的上一級函式 呼叫函式 如果它...
異常處理機制
1 c 中異常處理機制使得異常的引發和異常的處理不必在同乙個函式中。2 異常是專門針對抽象程式設計中的一系列錯誤處理的,c 的函式機制是棧結構,先進後出,依次訪問,無法跳躍。3 異常超脫於函式機制,決定了其對函式的跨越式回跳。4 異常跨越函式 普通用法 基本用法 void add int a,int...
異常處理機制
異常處理機制分為以下2點 異常處理五個關鍵字 try catch finally throw throws 用了try catch程式出現異常不會終止,會丟擲異常繼續執行下面任務 public static void main string args catch error e catch exce...