二.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 的異常處理進行了擴充套件,提出...