亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++之異常處理詳解

2020-01-26 15:55:56
字體:
來源:轉載
供稿:網友

程序中的錯誤分為編譯時的錯誤和運行時的錯誤。編譯時的錯誤主要是語法錯誤,比如:句尾沒有加分號,括號不匹配,關鍵字錯誤等,這類錯誤比較容易修改,因為編譯系統會指出錯誤在第幾行,什么錯誤。而運行時的錯誤則不容易修改,因為其中的錯誤是不可預料的,或者可以預料但無法避免的,比如內存空間不夠,或者在調用函數時,出現數組越界等錯誤。如果對于這些錯誤沒有采取有效的防范措施,那么往往會得不到正確的運行結果,程序不正常終止或嚴重的會出現死機現象。我們把程序運行時的錯誤統稱為異常,對異常處理稱為異常處理。C++中所提供的異常處理機制結構清晰,在一定程度上可以保證程序的健壯性。

C++中處理異常的過程是這樣的:在執行程序發生異常,可以不在本函數中處理,而是拋出一個錯誤信息,把它傳遞給上一級的函數來解決,上一級解決不了,再傳給其上一級,由其上一級處理。如此逐級上傳,直到最高一級還無法處理的話,運行系統會自動調用系統函數terminate,由它調用abort終止程序。這樣的異常處理方法使得異常引發和處理機制分離,而不在同一個函數中處理。這使得底層函數只需要解決實際的任務,而不必過多考慮對異常的處理,而把異常處理的任務交給上一層函數去處理。

C++的異常處理機制有3部分組成:try(檢查),throw(拋出),catch(捕獲)。把需要檢查的語句放在try模塊中,檢查語句發生錯誤,throw拋出異常,發出錯誤信息,由catch來捕獲異常信息,并加以處理。一般throw拋出的異常要和catch所捕獲的異常類型所匹配。異常處理的一般格式為:

復制代碼 代碼如下:

  try
  {
    被檢查語句
    throw 異常
  }
  catch(異常類型1)
  {
    進行異常處理的語句1
  }
  catch(異常類型2)
  {
    進行異常處理的語句2
  }
  ...

下面我們用示例演示一下異常處理:
復制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>
template <typename T>
T Div(T x,T y)
{
if(y==0)
throw y;//拋出異常
return x/y;
}
int main()
{
int x=5,y=0;
double x1=5.5,y1=0.0;
try
    {
//被檢查的語句
        std::cout<<x<<"/"<<y<<"="<<Div(x,y)<<std::endl;
        std::cout<<x1<<"/"<<y1<<"="<<Div(x1,y1)<<std::endl;
    }
catch(int)//異常類型
    {
        std::cout<<"除數為0,計算錯誤!"<<std::endl;//異常處理語句
    }
catch(double)//異常類型
    {
        std::cout<<"除數為0.0,計算錯誤!"<<std::endl;//異常處理語句
    }
return0;
}

結果:

看了上述的示例代碼,也許有人會問,第二個雙精度類型的除法計算也應該拋出異常才對啊,在實際的運行過程中并非如此,其實該雙精度類型除法函數根本沒有被執行過。以上程序的執行規程為:調用函數Div(x,y)時發生異常,由函數Div中的語句"throw y"拋出異常,并不在往下執行return x/y,接著catch捕獲int類型的異常并處理異常,最后直接執行"return 0"。因此函數Div(x1,y1)和catch(double){}模塊根本沒有被執行。如果,我們把y的值改為1,則結果就變成為:

如果在執行try語句模塊時,沒有發生異常,則catch語句塊不起作用,流程轉到其后的語句繼續執行。從上述兩個結果中可知第一次throw拋出的int類型所以找到處理該類型的catch,而第二次是拋出double類型所找到的是處理double類型的catch。

下面對異常處理補充幾點:(1)try和catch塊中必須要用花括號括起來,即使花括號內只有一個語句也不能省略花括號;(2)try和catch必須成對出現,一個try_catch結果中只能有一個try塊,但可以有多個catch塊,以便與不同的異常信息匹配;(3)如果在catch塊中沒有指定異常信息的類型,而用刪節號"...",則表示它可以捕獲任何類型的異常信息;(4)如果throw不包括任何表達式,表示它把當前正在處理的異常信息再次拋出,傳給其上一層的catch來處理;(5)C++中一旦拋出一個異常,如果程序沒有任何的捕獲,那么系統將會自動調用一個系統函數terminate,由它調用abort終止程序;

最后還是一樣,我將用一個示例來總結一下今天所講的內容(開發工具:vs2010): 

復制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>

template <typename T>
T Div(T x,T y)
{
if(y==0)
throw y;//拋出異常
return x/y;
}

int main()
{
int x=5,y=1;
double x1=5.5,y1=0.0;
try
    {
//被檢查的語句
        std::cout<<x<<"/"<<y<<"="<<Div(x,y)<<std::endl;
        std::cout<<x1<<"/"<<y1<<"="<<Div(x1,y1)<<std::endl;
    }
catch(...)//捕獲任意類型異常
    {
try
        {
            std::cout<<"任意類型異常!"<<std::endl;
throw;//拋出當前處理異常信息給上一層catch
        }
catch(int)//異常類型
        {
            std::cout<<"除數為0,計算錯誤!"<<std::endl;//異常處理語句
        }
catch(double)//異常類型
        {
            std::cout<<"除數為0.0,計算錯誤!"<<std::endl;//異常處理語句
        }

    }

return0;
}


結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久五月天| 日韩在线欧美在线国产在线| 亚洲老头老太hd| 国产精品99久久久久久人| 姬川优奈aav一区二区| 日日狠狠久久偷偷四色综合免费| 国产精品久久久久久久久免费看| 久久精品久久久久久| 久久久久久成人精品| 亚洲精品二三区| 日韩av在线高清| 久久精品国产一区| 中日韩午夜理伦电影免费| 国产欧美一区二区三区四区| 亚洲男人天堂手机在线| 日韩欧美精品免费在线| 国产在线观看一区二区三区| 国产精品电影网站| 久久久999成人| 粉嫩av一区二区三区免费野| 国产不卡av在线免费观看| 亚洲精品白浆高清久久久久久| 日韩亚洲成人av在线| 色婷婷av一区二区三区久久| 久久久成人精品视频| 久久91超碰青草是什么| 国产精品美女久久久久av超清| 日韩高清av一区二区三区| 欧美性在线观看| 久久久久女教师免费一区| 久久中文字幕视频| 在线视频精品一| 26uuu另类亚洲欧美日本一| 欧美日韩美女在线观看| 乱亲女秽乱长久久久| 久久视频这里只有精品| 国产精品入口福利| 欧美精品制服第一页| 日本韩国欧美精品大片卡二| 色哟哟网站入口亚洲精品| 亚洲精品一区在线观看香蕉| 日本三级久久久| 久久久亚洲国产天美传媒修理工| 日韩国产精品一区| 最好看的2019年中文视频| 亚洲精品少妇网址| 97国产在线观看| 日韩美女视频在线观看| 国产一区二区三区视频| 亚洲欧美制服综合另类| 国产精品久久久久久久久久新婚| 亚洲欧美一区二区三区情侣bbw| 日本一欧美一欧美一亚洲视频| 久久香蕉国产线看观看网| 中文字幕亚洲精品| 国产主播精品在线| 在线观看视频亚洲| 亚洲成人黄色在线| 九九热精品在线| 欧美高清电影在线看| 亚洲影院色无极综合| 亚洲欧美一区二区三区情侣bbw| 欧美在线视频导航| 亚洲国产小视频在线观看| 在线观看国产精品91| 欧美激情视频在线| 性欧美办公室18xxxxhd| 91嫩草在线视频| 久久久久国产精品免费| 国产日韩精品入口| 国产精品精品久久久久久| 国语自产精品视频在线看| 亚洲精品国产综合久久| 国产一区二区在线免费视频| 欧美一区二区视频97| 亚洲黄色有码视频| 日韩最新免费不卡| 91中文在线视频| 色久欧美在线视频观看| 国产精品h在线观看| 久久av红桃一区二区小说| 日韩最新在线视频| 欧美理论在线观看| 欧美亚洲在线播放| 成年人精品视频| 成人妇女淫片aaaa视频| www高清在线视频日韩欧美| 97久久精品国产| 久久国产天堂福利天堂| 日韩精品中文字幕在线| 日韩精品在线私人| 2021国产精品视频| 中文字幕国产精品久久| 91网站在线看| 97视频免费观看| 中文字幕在线视频日韩| 91亚洲精品久久久| 国产精品99久久久久久人| 欧美男插女视频| 色偷偷噜噜噜亚洲男人| 国产精品高潮呻吟久久av野狼| 亚洲男人的天堂在线播放| 成人免费直播live| 91chinesevideo永久地址| 国产精品主播视频| 国产福利精品视频| 欧美一级视频免费在线观看| 亚洲精品久久久久中文字幕二区| 亚洲欧美在线一区二区| 国产精品永久免费在线| 正在播放国产一区| 欧美成人精品不卡视频在线观看| 久久好看免费视频| 亚洲伊人第一页| 国产精品免费一区| 欧美中文字幕在线观看| 欧美精品一本久久男人的天堂| 欧美老女人在线视频| 欧美激情精品久久久久久变态| 57pao国产精品一区| 91综合免费在线| 国产精品日本精品| 97在线视频免费看| 亚洲第一精品夜夜躁人人躁| 激情懂色av一区av二区av| 亚洲影视中文字幕| 亚洲国产精品中文| 国产精品美女午夜av| 亚洲欧美中文字幕在线一区| 亚洲最大的网站| 国产日韩精品入口| 蜜臀久久99精品久久久无需会员| 九九热精品视频在线播放| 欧美在线视频免费播放| 欧美高跟鞋交xxxxhd| 亚洲一区中文字幕| 91干在线观看| 中文字幕日韩电影| 欧美日韩xxxxx| 97精品视频在线观看| 欧美日本高清一区| 欧美日韩亚洲一区二区| 视频直播国产精品| 午夜精品久久久久久久99热浪潮| 欧美日韩一区二区精品| 亚洲国产精品热久久| 日韩av在线网页| 久热精品在线视频| 欧美视频在线视频| 国产精品露脸av在线| 97av在线视频| 亚洲欧美日韩区| 久久成人亚洲精品| 国产精品美女久久久久久免费| 国产精品久久久| 久久人人爽人人爽爽久久| 日韩精品在线影院| 久久久久久999| www.欧美精品一二三区| 日韩av在线一区| 欧美在线视频一区| 国产精品电影在线观看| 国产精品福利久久久| 国产成人综合av|