c++ throw try catch

#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++定義的一個異常類

發佈了21 篇原創文章 · 獲贊 47 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章