欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C++怎么對(duì)拋出異常的函數(shù)使用noexcept

本篇內(nèi)容主要講解“C++怎么對(duì)拋出異常的函數(shù)使用noexcept”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C++怎么對(duì)拋出異常的函數(shù)使用noexcept”吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了涇源免費(fèi)建站歡迎大家使用!

如果函數(shù)不會(huì)拋出異常,則聲明為noexcept

Reason(原因)

如果經(jīng)過(guò)推斷不會(huì)拋出異常,程序就不必假設(shè)需要處理錯(cuò)誤并且盡快終止執(zhí)行。聲明函數(shù)為noexcept可以通過(guò)減少可能的執(zhí)行路徑的方式幫助優(yōu)化程序。這樣做也會(huì)加速失敗后的退出處理。

Example(示例)

為完全使用C寫(xiě)成或者不會(huì)發(fā)生異常的其他語(yǔ)言構(gòu)成的函數(shù)增加noexcept修飾。C++標(biāo)準(zhǔn)庫(kù)暗中為所有的C標(biāo)準(zhǔn)庫(kù)函數(shù)做了相同的事情。

Note(注意)

constexpr函數(shù)在運(yùn)行時(shí)刻可以拋出異常,因此你可以為某些(不是全部)constexpr函數(shù)指定noexcept。

譯者注:例如被0除。

Example(示例)

你甚至可以對(duì)可以拋出異常的函數(shù)使用noexcept。

vector<string> collect(istream& is) noexcept{    vector<string> res;    for (string s; is >> s;)        res.push_back(s);    return res;}

如果collect()在運(yùn)行時(shí)耗盡了內(nèi)存,程序就會(huì)崩潰。除非程序經(jīng)過(guò)精心設(shè)計(jì)可以避免內(nèi)存耗盡,這可能是可以做的唯一的事情了。terminate()可能生成適當(dāng)?shù)腻e(cuò)誤日志信息(但是當(dāng)內(nèi)存耗盡時(shí),很難難精巧地完成任何事)

譯者注:聲明noexcept就是告訴編譯器不需要生成捕獲和向外傳遞異常的機(jī)制了。如果實(shí)際上發(fā)生了異常,其結(jié)果就如本節(jié)所描述。作者這里想說(shuō)的應(yīng)該是:錯(cuò)誤指定noexcept屬性是有風(fēng)險(xiǎn)的。

Note(注意)

當(dāng)需要決定是否為函數(shù)標(biāo)記noexcept時(shí),必須注意代碼執(zhí)行時(shí)所處的執(zhí)行環(huán)境。最重要的原因是關(guān)于拋出異常和內(nèi)存分配的議題。試圖被完美地普遍使用的代碼(例如標(biāo)準(zhǔn)庫(kù)或其他類似代碼)需要支持bad_loc異常可能被有意義地處理的環(huán)境(而不只是簡(jiǎn)單中止執(zhí)行,譯者注)。然而,大多數(shù)程序和執(zhí)行環(huán)境無(wú)法有意義地處理分配內(nèi)存失敗,而且在那些情況下,中止程序是申請(qǐng)內(nèi)存失敗最干凈和最簡(jiǎn)單的處理。如果你知道你的應(yīng)用程序不能處理內(nèi)存分配錯(cuò)誤,哪怕函數(shù)包含內(nèi)存分配動(dòng)作,為其增加noexcept可能也是適當(dāng)?shù)?。(這樣可以觸發(fā)terminate處理,譯者注)

換句話說(shuō),大多數(shù)程序,大多數(shù)函數(shù)都會(huì)拋出異常(例如,它們可能是使用new,可能會(huì)調(diào)用可能拋出異常的函數(shù),或者使用了通過(guò)拋出異常報(bào)告錯(cuò)誤的庫(kù)函數(shù)),因此不要在不考慮異常是否會(huì)被處理的情況下就到處使用noexcept。

noexcept對(duì)于那些經(jīng)常使用的,低層次的函數(shù)特別有用(而且很容易判斷正確性)。

Note(注意)

析構(gòu)函數(shù),交換函數(shù),移動(dòng)操作和默認(rèn)構(gòu)造函數(shù)永遠(yuǎn)不應(yīng)該拋出異常。

Enforcement(實(shí)施建議)

  • Flag functions that are not noexcept, yet cannot throw.

    標(biāo)記那些沒(méi)有noexcpet屬性但是又不拋出異常的函數(shù)。

  • Flag throwing swap, move, destructors, and default constructors.

    標(biāo)記拋出異常的交換/移動(dòng)操作,析構(gòu)函數(shù)和默認(rèn)構(gòu)造函數(shù)。

到此,相信大家對(duì)“C++怎么對(duì)拋出異常的函數(shù)使用noexcept”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前題目:C++怎么對(duì)拋出異常的函數(shù)使用noexcept
網(wǎng)頁(yè)URL:http://chinadenli.net/article14/gjsgde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)面包屑導(dǎo)航、App開(kāi)發(fā)小程序開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)