#include <iostream>
using namespace std;
double fuc(double x, double y) //定義函數
{
if(y==0)
{
//throw y; //除數爲0,拋出異常
throw exception();
}
return x/y; //否則返回兩個數的商
}
void main()
{
double res;
try //定義異常
{
res=fuc(2,3);
cout<<"The result of x/y is : "<<res<<endl;
res=fuc(4,0); //出現異常
}
//catch(double ) //捕獲並處理異常
//{
// cout<<"error of dividing zero.\n";
// //exit(1); //異常退出程序
//}
catch(exception& ) //捕獲並處理異常
{
cout<<"error of dividing zero.\n";
//exit(1); //異常退出程序
}
cout<<"finished";
}
發生異常時候,(除數爲0),需要拋出異常,即throw,進而執行catch語句;
正常時候,執行完try後,直接跳過catch,這裏會涉及到棧解退(unwinding the stack),示意圖:
(<<c++ primer plus 6th edition>>:中文版 page.625)
需要注意的是,catch語句類似函數定義,但即使用了引用,也產生臨時拷貝
即 catch(exception& ) 與catch(exception )是一回事,編譯器都產生一個臨時拷貝
其中exception是c++定義的一個異常類