日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++异常之异常说明

發(fā)布時(shí)間:2023/12/10 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++异常之异常说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分享一下我老師大神的人工智能教程!零基礎(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ō)明的特別之處

#include <iostream>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)用通常是有限的!

修改后的 divd 函數(shù)內(nèi)繼續(xù)編寫有拋出異常的代碼, 編譯后再次運(yùn)行程序,其輸出結(jié)果也表示異常機(jī)制執(zhí)行正常。 其原因就如上述所說(shuō)的理解那樣:編譯器不會(huì)對(duì)異常說(shuō)明進(jìn)行檢測(cè),異常說(shuō)明更多的是寫給函數(shù)的用戶看。而在一開始函數(shù)異常說(shuō)明的類型與實(shí)際拋出的異常類型不匹配的情況中,同樣由于 “編譯器不會(huì)對(duì)異常說(shuō)明進(jìn)行檢測(cè)” 的原因,所以編譯通過(guò),異常機(jī)制運(yùn)行正常。總結(jié):異常說(shuō)明還是有用的!但更多是寫給函數(shù)用戶看的。讓函數(shù)用戶清楚知道拋出的異常類型,從而更好和正確地在運(yùn)用此函數(shù)時(shí),編寫對(duì)其的異常檢測(cè)。由于初學(xué)者在學(xué)語(yǔ)法的時(shí)候,更多的只是看書,不進(jìn)行實(shí)踐驗(yàn)證。就算實(shí)踐驗(yàn)證了,也可能只是照書上代碼敲,看看運(yùn)行結(jié)果是否一樣。這里給出一個(gè)建議:初學(xué)者在學(xué)習(xí)語(yǔ)法的時(shí)候,應(yīng)該多上機(jī)實(shí)踐驗(yàn)證書上語(yǔ)法的準(zhǔn)確性,就算運(yùn)行結(jié)果與書上一致,也應(yīng)該多動(dòng)腦筋,對(duì)其進(jìn)行變形或改動(dòng)。這樣往往能學(xué)到的東西和印象都會(huì)更深的!




???????????

給我老師的人工智能教程打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)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。