C C 異常處理機制 II

2021-06-17 01:09:53 字數 2602 閱讀 3622

二.c++語言異常處理

2.1 c++異常處理語法

感謝c++語言的後期改造者們,他們在標準c++語言中專門整合了異常處理的相關語法(與之不同的是,所有的c 標準庫異常體系都需要執行庫的支援,它不是語言核心支援的)。當然,異常處理被加到程式語言中,也是程式語言發展和逐步完善的必然結果。我們看到,c++不是唯一整合異常處理的語言。

c++的異常處理結構為:

try

catch(type_1 e)

catch(type_2 e)

catch (...)//會捕獲所有未**獲的異常,必須最後出現

而異常的丟擲方式為使用throw(type e),try、catch和throw都是c++為處理異常而新增的關鍵字。

看看這個例子:

#include

//定義point結構體(類)

typedef struct tagpoint 

point; 

//扔出int異常的函式

static void f(int n)   

//扔出point異常的函式

static void f(point point)   

int main()   

catch (int e)   

catch (point e)   

return 0; 

}  函式f定義了兩個版本:f(int)和f(point),分別丟擲int和point異常。當main函式的try中呼叫f(point)時和f(1)時,分別輸出:

捕獲到point異常:(0,0)  和

捕獲到int異常:1 

在c++中,throw丟擲異常的特點有:

(1)可以丟擲基本資料型別異常,如int和char等;

(2)可以丟擲複雜資料型別異常,如結構體(在c++中結構體也是類)和類;

(3)c++的異常處理必須由呼叫者主動檢查。一旦丟擲異常,而程式不捕獲的話,那麼abort()函式就會被呼叫,彈出如圖1所示的對話方塊,程式被終止;

(4)可以在函式頭後加throw([type-id-list])給出異常規格,宣告其能丟擲什麼型別的異常。type-id-list是乙個可選項,其中包括了乙個或多個型別的名字,它們之間以逗號分隔。如果函式沒有異常規格指定,則可以丟擲任意型別的異常。

2.2 標準異常

下面給出了c++提供的一些標準異常:

namespace std    

請注意觀察上述類的層次結構,可以看出,標準異常都派生自乙個公共的基類exception。基類包含必要的多型性函式提供異常描述,可以被過載。下面是exception類的原型:

class exception 

2.3異常處理函式

在標準c++中,還定義了數個異常處理的相關函式和型別(包含在標頭檔案中):

namespace std    

其中的terminate相關函式與未**獲的異常有關,如果一種異常沒有被指定catch模組,則將導致terminate()函式被呼叫,terminate()函式中會呼叫ahort()函式來終止程式。可以通過set_terminate(terminate_handler)函式為terminate()專門指定要呼叫的函式,例如:

#include

#include

using namespace std; 

//定義point結構體(類)

typedef struct tagpoint 

point; 

//扔出point異常的函式

static void f()   

//set_terminate將指定的函式

void terminatefunc()   

int main()   

catch (int) //捕獲int異常  

//point將不能**獲到,引發terminatefunc函式被執行

return 0; 

}  這個程式將在控制台上輸出"set_terminate指定的函式" 字串,因為point型別的異常沒有**獲到。當然,它也會彈出圖1所示對話方塊(因為呼叫了abort()函式)。

上述給出的僅僅是乙個set_terminate指定函式的例子。在實際工程中,往往使用set_terminate指定的函式進行一些清除性的工作,其後再呼叫exit(int)函式終止程式。這樣,abort()函式就不會被呼叫了,也不會輸出圖1所示對話方塊。

關於標準c++的異常處理,還包含一些比較複雜的技巧和內容,我們可以查閱《more effective c++》的條款9~條款15。

C C 異常處理機制 II

二.c 語言異常處理 2.1 c 異常處理語法 感謝c 語言的後期改造者們,他們在標準c 語言中專門整合了異常處理的相關語法 與之不同的是,所有的c 標準庫異常體系都需要執行庫的支援,它不是語言核心支援的 當然,異常處理被加到程式語言中,也是程式語言發展和逐步完善的必然結果。我們看到,c 不是唯一整...

C C 異常處理機制 I

引言 visual c 提供了對c語言 c 語言及mfc的支援,因而其涉及到的異常 exception 處理也包含了這三種型別,即c語言 c 語言和mfc的異常處理。除此之外,微軟對c和c 的異常處理進行了擴充套件,提出了結構化異常處理 seh 的概念,它支援c和c 與之相比,mfc異常處理僅支援c...

C C 異常處理機制 I

c c 異常處理機制 i 2010 12 07 17 23 44 分類 c c 引言 visual c 提供了對c語言 c 語言及mfc的支援,因而其涉及到的異常 exception 處理也包含了這三種型別,即c語言 c 語言和mfc的異常處理。除此之外,微軟對c和c 的異常處理進行了擴充套件,提出...