異常的優點
函式的返回值可以忽略,但異常不可以,從而有助於我們捕獲錯誤
整形返回值沒有任何語義資訊,不容易判斷錯誤型別。而異常卻包含語義資訊,容易找出錯誤
整形返回值缺乏上下文資訊,異常作為乙個類,可以擁有自己的成員,這些成員可以傳遞足夠的資訊
異常處理可以在呼叫跳級
#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...