1. 程式人生 > >程序中try、throw、catch三者之間的關系

程序中try、throw、catch三者之間的關系

產生 exceptio long 對象 可能 變量 public row hello

c++程序中,采用一種專門的結構化處理邏輯的異常處理機制。

1.try語句

try語句塊的作用是啟動異常處理機制,檢測try語句塊中程序語句執行時可能出現的異常。

try語句塊總是與catch一同出現,在一個try語句塊後,至少有一個catch語句塊。

2.throw語句

throw語句用來強行拋出異常,具體格式如下:

throw[異常類型表達式] 異常類型表達式可以是類對象,常量或變量表達式。

3.catch語句塊

catch語句塊首先捕捉try語句塊產生的或有throw拋出的異常,然後進行處理。

catch(形參類型[形參名]) //形參類型可以是c++的基本類型(如int,long,char等)

{

          //異常處理語句...

}

catch語句塊中使用該形參名。例如:

try

{

throw "除數不能為0!";

}

catch(const char* s) //制定形參類型名

{

cout<<s<<endl; //使用異常形參名

}

當catch語句塊中的整個形參為“...”時,則表示catch語句塊能夠捕捉任何類型的異常。catch的語句塊前面必須是try語句或者另外一個catch語句塊。

try、throw、catch三者之間的關系和註意點

throw和catch的關系類似函數調用關系,catch指定形參,throw給出實參。編譯器按照catch出現的順序及catch指定的參數類型確定throw拋出的異常應該有哪個catch來處理。

throw不一定出現在try語句塊中,實際上,他可以出現在需要的任何地方,即使在catch的語句塊中,仍然可以繼續使用throw,只要最終有catch可以捕獲它即可。

案例:

class Overflow

{

public:

  Overflow(char,double,double);

};

void f(double x)

{

throw Overflow(‘+‘,x,3.45e107); //在函數體中使用throw,用來拋出一個對象

}

try

{

  f(1.2);

}catch(Overflow& oo)

{

  //處理Overflow類型異常

}

當throw出現在catch語句塊中時,通過throw即可重新拋出一個新類型的異常,也可以重新拋出當前這個異常,在這種情況下,throw不應帶任何實參。

try{

}catch(int)

{

throw "hello exception"; //拋出一個新的異常,異常類型為const char*

}catch(float)

{

throw; } //重新拋出當前的float類型異常

程序中try、throw、catch三者之間的關系