91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++程序運行時異常處理是怎樣的

發布時間:2021-11-30 16:45:03 來源:億速云 閱讀:208 作者:iii 欄目:編程語言

這篇文章主要介紹“C++程序運行時異常處理是怎樣的”,在日常操作中,相信很多人在C++程序運行時異常處理是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”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)  throwy;//拋出異常  returnx/y;}  intmain()  {  intx=5,y=0;  doublex1=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;  }

結果:

C++程序運行時異常處理是怎樣的

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

C++程序運行時異常處理是怎樣的

如果在執行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)  throwy;//拋出異常  returnx/y;  }  intmain(){  intx=5,y=1;  doublex1=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;  }

結果:

C++程序運行時異常處理是怎樣的

到此,關于“C++程序運行時異常處理是怎樣的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

德惠市| 蒙自县| 宜兰市| 黑山县| 肥西县| 林口县| 乌鲁木齐县| 汉阴县| 柯坪县| 大冶市| 洪泽县| 嘉义县| 台山市| 昔阳县| 高要市| 杂多县| 泰安市| 临泽县| 大渡口区| 神池县| 平舆县| 陆丰市| 邯郸县| 榆中县| 台前县| 巫山县| 高碑店市| 闽侯县| 广南县| 定结县| 喜德县| 台湾省| 绥德县| 涪陵区| 正蓝旗| 马尔康县| 安多县| 织金县| 榆树市| 洪洞县| 洪雅县|