異常處理(上)

2021-10-03 10:01:37 字數 2247 閱讀 9864

c++中的異常處理

小結:所有的**都有可能不按照預定義的方式執行

典型問題一:

double div(double a, double b) 

double add(double a, double b)

double minus(double a, double b)

double multi(double a, double b)

這一組函式單純的實現了四則運算

​ 但是除法函式卻總是會有意外。。。

int main()

return a/b;

}

#include #include using namespace std;

double div(double a, double b, bool* valid)

return a / b;

}double add(double a, double b)

double minus(double a, double b)

double multi(double a, double b)

int main(int argc, char *ar**)

if(length < 4)

if((v < 0) || (v > 10) )

unsigned char* p = (unsigned char*)dest;

for(int i=0; i缺陷:正常**邏輯和異常處理**混合在一起,導致**迅速膨脹,難以維護。。。

#include #include using namespace std;

int memset(void* dest, unsigned int length, unsigned char v)

if( length < 4 )

if( (v < 0) || (v > 9) )

unsigned char* p = (unsigned char*)dest;

for(int i=0; i結果

其它c方式的異常處理方案

​ goto語句

​ setjmp() 和 longjmp()

tips:

在c語言中可以使用上面兩種解決方案將異常處 理**放到統一的地方,與正常邏輯**分開

但在c++中,這兩種方法可能導致物件的建構函式或者析構函式得不到呼叫而引發錯誤

c++中提供了try和catch語句塊對可能產生異常的**進行分開處理

​ try語句塊處理正常邏輯

​ catch語句塊處理異常

c++語言中通過throw語句引發乙個異常

#include #include using namespace std;

#define div_zero_error -1

double div(double a, double b)

return a / b;

}int main(int argc, char *ar**)

if( length < 4 )

if( (v < 0) || (v > 9) )

unsigned char* p = (unsigned char*)dest;

for(int i=0; i同乙個try語句塊可以跟上多個catch語句塊

​ 同乙個try語句塊可以丟擲多種不同型別的異常

​ 不同型別的異常由不同的catch語句塊負責處理

異常被丟擲後會自上而下逐一匹配catch語句塊

​ 異常匹配時,不會進行預設型別轉換

異常處理是程式中隨處可見的情況

在工程實踐中,大多數的**都是用於處理異常的

異常處理的質量直接決定最終產品的質量

c++提供了 try…catch 語句用於將正常邏輯**與異常 處理**進行分開處理

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