C++异常之异常说明
分享一下我老師大神的人工智能教程!零基礎(chǔ),通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉(zhuǎn)載本篇文章。分享知識(shí),造福人民,實(shí)現(xiàn)我們中華民族偉大復(fù)興!
為了能夠編寫適當(dāng)?shù)腸atch子句,了解一個(gè)函數(shù)是否拋出異?;驎?huì)拋出哪些異常對(duì)函數(shù)的用戶來(lái)說(shuō)是很有幫助的。
而我們可以通過(guò) 異常說(shuō)明 進(jìn)行對(duì)一個(gè)函數(shù)的異常進(jìn)行說(shuō)明, 如果函數(shù)拋出異常,被拋出的異常將是包含在該說(shuō)明中的一種或是從列出的異常中派生的類型。
異常說(shuō)明有如下的幾種形式:
1. 指定異常
T ? funNname( parameterlist ) throw( T1, T2,····,Tn);
其中 T 是類型,?parameterlist 是參數(shù)列表, 而類型?T1, T2,····,Tn 是函數(shù)會(huì)拋出的異常。
2. 不拋出異常
T ? funNname( parameterlist ) throw( );
拋出異常類型列表為空,表示的是該函數(shù)不拋出任何類型異常。
3. 拋出任意類型的異常
T ? funNname( parameterlist );
這表示該函數(shù)可以拋出任意類型的異常。
下面通過(guò)一段簡(jiǎn)單的代碼來(lái)說(shuō)明異常說(shuō)明的特別之處
class demo{};using namespace std;?double divd(int a, int b) throw(int)? //異常說(shuō)明,表示函數(shù)divd會(huì)拋出類型為int的異常{??? if(b == 0)? throw demo();???????? //拋出類型為demo的異常???? ??? return??? a/b;}int main(){??? try??? {??????? divd(1,0);??? }??? catch(demo)?????????????????????? //捕獲異常類型demo??? {??????? cout << " divided by zero " << endl;??? }??? catch(int)??????????????????????? //捕獲異常類型int??? {??????? cout<<"zero"<<endl;??? }??? ??? return 0;}這段代碼的運(yùn)行結(jié)果是輸出: ?divided by zero奇怪了,在 divd 函數(shù)的聲明中,只說(shuō)明了拋出類型為 int 的異常,為什么其函數(shù)內(nèi)拋出的異常類型卻為demo呢??
我們可以暫時(shí)理解為:在某函數(shù)的異常說(shuō)明中的列出的類型與該函數(shù)內(nèi)拋出的異常類型不完全匹配時(shí), 但在異常處理代碼中的catch有對(duì)其類型的捕獲, 所以程序運(yùn)行正常。
好,下面我們根據(jù)異常說(shuō)明進(jìn)行一些修改
double divd(int a, int b) throw( )???? //將throw(int) 改為 throw( )修改之后,編譯運(yùn)行,看到的輸出結(jié)果還是: ??divided by zero根據(jù)上面對(duì)異常說(shuō)明的三種形式介紹,我們知道在函數(shù)聲明后面添加 throw()的意思是說(shuō)明了此函數(shù)不會(huì)拋出任何的異常。那為什么這里拋出了而且又被捕獲呢?
其實(shí),在編譯的時(shí)候,編譯器不能也不會(huì)試圖驗(yàn)證異常說(shuō)明。因不能在編譯時(shí)檢查異常說(shuō)明,異常說(shuō)明的應(yīng)用通常是有限的!
給我老師的人工智能教程打call!http://blog.csdn.net/jiangjunshow
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C++异常之异常说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python collections模块
- 下一篇: 关于C/C++中函数参数传递的规则