異常就是運行時出現(xiàn)的不正常,例如運行時耗盡了內(nèi)存或遇到意外的非法輸入,異常存在于程序的正常功能之外,并要求程序立即處理,不能不處理異常,常是足夠重要的,使程序不能繼續(xù)正常執(zhí)行的事件,如果找不到匹配的catch,程序就調(diào)用庫函數(shù)terminate
下面是處理異常的代碼:
#include<iostream> using namespace std; void func1(){ throw 3.0;}void func2(){ throw string("no"); //throw "出錯,除數(shù)為0了";使用catch(char *s)捕獲}void func3(){ throw IndexException();}int main() { try{ int a=3,b=0; int c=a/b; } catch(...){ } //這里catch后圓括號中的...指的是捕獲所有異常 //func1()的異常捕獲處理: try{ func1(); } catch(double){ } //使用catch(double &a){ cout<<a<<endl;輸出3.0 } //func2()的異常捕獲處理: try{ func2(); } catch(string& val){ cout<<val<<endl; //輸出"no" } //func3()的異常捕獲: try{ func3(); } catch(IndexException &e){ e.PRintException();//異常提示信息的輸出,輸出:提示:下標越界 } //若是catch(Exception &e){ },打印結(jié)果一樣 return 0; }拋出異常的時候,將暫停當前函數(shù)的執(zhí)行,檢查與該try相關的catch子句,看是否其中之一與被拋出對象相匹配,如果找到匹配的catch,就處理異常,如果找不到,就退出當前函數(shù)(釋放當前函數(shù)的內(nèi)存并撤銷局部對象),并且繼續(xù)在調(diào)用這個函數(shù)的函數(shù)中查找,釋放當前內(nèi)存并撤銷局部對象,這時會調(diào)用對象的析構(gòu)函數(shù),如果析構(gòu)函數(shù)拋出異常,將會調(diào)用標準庫terminate函數(shù),強制整個程序非正常退出,所以析構(gòu)函數(shù)應該從不拋出異常
異常的層次如下圖:
C++標準中,定義在<stdexcept>
中的任何異常類都派生自exception Class,本例也只是簡單地由exception繼承,在try段拋出一個異常并捕捉,代碼如下:
新聞熱點
疑難解答
圖片精選