雖然throw-catch機制類似於函式引數和函式返回機制,但是還是有些不同之處。
其中之一是函式fun()中的返回語句將控制權返回到呼叫fun()的函式a中,
但throw語句將控制權向上返回到第乙個這樣的函式:包含能夠捕獲相應異常的try-catch組合。
另乙個不同之處是,引發異常時,編譯器總是建立乙個臨時拷貝,即使異常規範和catch塊中指定的是引用。
請看下列**
class problem
void super() throw(problem)
if(oh_no)
problem oops; //construct object
throw opps; //throw it
tyr;
class bad_2 : public bad_1 ;
class bad_3 : public bad_2 ;
void duper()
if(oh_no)
throw bad_1()
if(rats)
throw bad_2()
if(drat)
throw bad_3()
trycatch(bad_2 &be)
catch(bad_1 &be)
如果將bad_3放在最前面,它將捕獲bad_1、bad_2和bad_3;
通過按照相反的順序排列,bad_3異常將被bad_3 &處理程式所捕獲。
通過正確地安排catch塊的順序,讓您能夠在如何處理異常方面有選擇的餘地。
有時候可能不知道會發生哪些異常,在這種情況下,仍能捕獲異常,即使不知道異常的型別。
方法是使用省略號來表示異常型別,從而捕獲任何異常:
catch
可以將這個放在最後,有點像switch中的default。
異常和其他
異常rtti 將類宣告放在另乙個類中,在另乙個類中宣告的類被稱為巢狀類。作用域 宣告位置 包含它的類是否可以使用它 從包含它的類派生而來的類是否可以使用它 在外部是否可以用 私有部分是否 否保護部分是是 否公有部分是是 是,通過類限定符來使用 對異常處理有3部分組成 throw終止函式的執行,並使得...
C 學習(友元, 異常, 其他)
包含 object.func func2 class a class b include using namespace std class a a void get class b a geta a getb b void gety int main 友元類 如果某類b的成員函式會頻繁的訪問另乙個...
關於異常和其他
關於異常的幾種處理方法 1 呼叫abort abort 函式的原型位於標頭檔案cstdlib.h 或者stdlib.h 中,其典型實現是向標準錯誤流 即cerr使用的錯流 傳送abnormal program termination 程式異常終止 然後終止程式。它還返回乙個隨實現而異的值。abort...