(30)try語句塊和異常處理

2021-07-24 13:53:26 字數 2002 閱讀 1702

異常是指存在於執行時的反常行為,這些行為超出了函式正常功能的範圍。

當程式的某部分檢測到乙個它無法處理的問題時,需要用到異常處理。異常處理機制為程式中異常檢測和異常處理這兩部分的協作提供支援。在c++語言中,異常處理包括:

一.throw表示式,異常檢測部分使用throw表示式來表示它遇到了無法處理的問題。我們說throw引發了異常。

二.try語句塊,異常處理部分使用try語句處理異常。try語句塊以關鍵字try開始,並以乙個或多個catch子句結束,因catch子句處   理異常,所以他們被稱為異常處理**。

三.一套異常類,用於在throw表示式和相關的catch子句之間傳遞異常的具體資訊

程式的異常檢測部分使用throw表示式引發乙個異常。throw表示式包含關鍵字throw和緊跟其後的乙個表示式,其中表示式的型別就

是丟擲的異常型別。throw表示式後面通常緊跟乙個分號,從而構成一條表示式語句。

如:

if (i == 3) throw runtime_error("異常:i為3");
try語句塊的通用語法形式:

trycatch(exception-declaration)catch(exception-declaration) //.....

catch子句包括三部分:關鍵字ccatch、括號內乙個(可能為命名的)物件的宣告(稱作異常宣告)以及乙個塊。當選中了某個catch

子句處理處理異常了之後,執行與之對應的塊。catch一旦完成,程式跳轉到try語句快最後乙個catch子句之後的那條語句繼續執行。

try語句塊內宣告的變數在塊外部無法訪問,特別是在catch子句內也無法訪問。

如:

int i = 1;	

while (cin >> i)

catch (runtime_error e)

}cout << i << endl; //輸入3時 輸出異常結果:異常:i為3

在複雜的系統中,程式在遇到丟擲異常的**前,其執行路徑可能已經經過了多個try語句塊。例如,乙個try語句可能呼叫了包含另乙個try語句塊的函式,新的try語句塊可能呼叫了包含又乙個try語句的新函式,以此類推。

如果最終還是沒能找到任何匹配的catch子句,程式轉到名為terminate的標準庫函式。該函式的行為與系統有關,一般情況下,執行該函式將導致程式非正常退出。

對於那些沒有任何try語句塊定義的異常,也按照類似的方式處理:畢竟,沒有try語句塊也就意味著沒有匹配的catch子句。如果一段程式沒有try語句塊且發生了異常,系統會呼叫terminate函式並終止當前程式的執行。

c++標準庫定義了一組類,用於報告標準庫函式遇到的問題。這些異常類也可以在使用者編寫的程式中使用,他們分別定義在4個頭檔案中:

一.exception標頭檔案定義了最通用的異常類exception。它們只報告異常的發生,不提供任何額外的資訊

二.stdexcept標頭檔案定義了幾種常用的異常類。

三.new標頭檔案定義了bad_alloc異常型別。

四.type_info標頭檔案定義了bad_cast異常型別

標準庫異常類只定義了幾種運算,包括建立或拷貝異常型別的物件,以及為異常型別的物件賦值。

我們只能以預設初始化的方式初始化exception、bad_alloc和bad_cast物件,不允許為這些物件提供初始值。   

其他異常型別的行為恰好相反:應該使用string物件或者c風格字串初始化這些型別的物件,但是不允許使用預設初始化的方式。當建立子類物件時,必須提供初始值,該初始值含有錯誤相關的資訊。

異常型別只定義了乙個名為waht的成員函式,該函式沒有任何引數,返回值是乙個指向c風格字串的const char*。該字串的目的是提供關於異常的一些文字資訊。

what函式返回的c風格字串的內容與異常物件的型別無關。如果異常型別有乙個字串初始值,則what返回該字串。對於其他無初始值的異常型別來說,waht返回的內容由編譯器決定。

try語句塊和異常處理

今晚看了一下c primer 的異常處理的簡單介紹,在這裡簡略記一下 異常處理機制包括異常檢測和異常處理 在c 中異常處理主要包括 throw表示式 用 throw 表示式來丟擲 引發 異常 那自然有接收 try語句塊 包含catch子句 用try語句塊來表示這段 可能會丟擲異常,丟擲的異常通常會被...

try語句塊和異常處理

在c 中,異常處理包括 throw表示式 throw expression 異常檢測部分使用throw表示式來表示它遇到了無法處理的問題。throw表示式丟擲乙個異常並把控制權轉移到能處理該異常的最近的catch子句。try語句塊 try block 異常處理部分使用try語句塊處理異常。try關鍵...

try塊和異常處理

try塊和異常處理 c 的異常處理中包括 1 throw表示式,錯誤檢測部分使用這種表示式來說明遇到了不可處理的錯誤。可以說,throw引發了異常條件。2 try塊,錯誤處理部分使用它來處理異常。try語句塊以try關鍵字開始,並以乙個或多個catch子句結束。在try塊中執行的 所丟擲的異常,通常...