異常處理的一些說明
一、異常處理的語法
throw語句的語法: throw 表示式;
try-catch的結構為:
trycatch(異常資訊的型別[變數名])
二、.詳細說明
1.被檢測的部分必須放在try塊中,否則不起作用。
2.try塊和catch塊作為乙個整體出現,catch塊是try-catch結構中的一部分,必須緊跟在try塊之後,不能單獨使用,在兩者之間也不能插入其他語句,
例如: try
//do something
}cout<
catch(double)
//do something
}但是在乙個try-catch結構中,可以只有try塊而無catch塊。即只檢查而不處理,把catch處理塊放在其他函式中。
3.try塊和catch塊中必須有用花括號括起來的復合語句,即使花括號內只有一條語句,也不能省略花括號。
4.乙個try-catch結構中只能有乙個try塊,但卻可以有多個catch塊,以便與不同的異常資訊匹配,如:
try
catch(double)
catch(int)
cathc(char)
靠catch型別來匹配
5.catch後面的圓括號中,一般只寫異常資訊的型別名,如
catch(double)
catch只檢查所捕獲異常資訊的型別,而不檢查它們的值,例如a,b,c都是double型別,雖然它們的值不同,但在throw語句中寫throw a,throw b,throw c,作用型別均相同。因此如果需要檢測多個不同的異常資訊,應當由throw丟擲不同型別的異常資訊。
異常資訊可以是c++系統預定義的標準型別,也可以是使用者自定義的型別(如結構體或類)。如果由throw丟擲的資訊屬於該型別或者子型別,則catch與throw二者匹配,catch捕獲該異常資訊。
catch還可以指定變數名,如
catch(double d)
此時如果throw丟擲的異常資訊是double型的變數a,則catch在捕獲異常資訊a的同時,還使得d獲得a的值,或者說d得到a的乙個拷貝。什麼時候需要這樣做呢?有時候希望捕獲異常資訊時,還能利用throw丟擲的值,如
catch(double d)
表示「我不處理這個異常,請上級處理」。此時catch塊把當前的異常資訊再次丟擲,給上一層的catch塊處理。
9.如果throw丟擲的異常資訊找不到與之匹配的catch塊,那麼系統就會呼叫乙個系統函式terminate,使程式終止執行。
10.c++允許在宣告函式時,可列出可能丟擲的異常型別,如
double ********(double,double,double) throw(double)
表示********函式只能丟擲double型別的異常資訊,如果寫成
double ********(double,double,double) throw(double,int,char,float)
則表示********函式只限於丟擲double,int,char,float型別的異常資訊。
11.如果在try塊(或try塊中呼叫的函式)中定義了類物件,在建立該物件時要呼叫建構函式。在執行try塊(包括在try塊中呼叫其他函式)的過程中如果發生了異常,此時流程立即離開try塊(如果是在try塊呼叫的函式中發生異常,則流程首先離開該函式,回到呼叫它的try塊處,然後流程再從try塊中跳出轉到catch處理塊)。這樣的流程就有可能離開該物件的作用域而轉到其他函式,因而應事先做好結束物件前的清理工作,
c++的異常處理機制會在throw語句丟擲異常資訊被catch捕獲時,對有關的區域性物件進行析構(呼叫類物件的析構函式),
析構物件的順序與構造的順序相反,然後執行與異常資訊匹配的catch塊中的語句。
三、在異常處理中處理析構函式
**示例:
//異常處理中的析構問題
c 異常處理機制
c 異常處理機制 c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到...
c 異常處理機制
c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異...
C 異常處理機制
c 異常處理機制主要使用try,throw,catch三大關鍵字。try catch語句形式如下 require redcarpet markdown redcarpet.new hello world puts markdown.to htmltry catch exception1 ex 捕獲型...