亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++中為什么不要使用拋異常聲明

發布時間:2021-11-24 11:46:29 來源:億速云 閱讀:180 作者:iii 欄目:大數據

本篇內容介紹了“C++中為什么不要使用拋異常聲明”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

E.20:不要使用拋異常聲明

Reason(原因)

Exception specifications make error handling brittle, impose a run-time cost, and have been removed from the C++ standard.

拋異常聲明讓錯誤處理更脆弱,強制產生運行時成本,已經從C++標準中被移除了。

Example(示例)

int use(int arg)
   throw(X, Y)
{
   // ...
   auto x = f(arg);
   // ...
}

如果f()拋出了不同于X和Y的異常,就會激活意外的錯誤處理,而這個處理的默認動作就是終止程序。那樣還好,假設我們已經檢查過了,這種事情不會發生,這時如果f被修改為拋出一個新異常Z,系統馬上就會發生崩潰,除非我們修改use()(并且重新進行完整測試)。麻煩在于f()可能處于某個我們無法控制的功能庫中,而且對于新異常use()也沒有什么可做的,或者根本就不感興趣。我可以修改use()將Z傳出,但是接下來user()的調用者可能需要跟著修改。情況很快就會失控。或者我們可以為use()增加try-catch結構將Z映射到一個可以接受的異常。情況很快會再次失控。注意成組修改異常經常發生在系統的底層(例如由于網絡庫或某個中間件發生變化),因此變更會像氣泡一樣向上傳遞至整個調用鏈。在大規模代碼中,這可能意味著沒有人可以將庫更新到新版本,直到最后的調用者發生變更。如果use()是庫的一部分,它可能無法更新,因為這種變更不知道會影響誰。

讓異常傳播直至一個有可能處理它的函數,這樣的原則已經證明自己很多年了。

Note(注意)

No. This would not be any better had exception specifications been statically enforced. For example, see Stroustrup94.

沒有。堅持推進使用拋異常聲明一點好處也沒有。參見

Stroustrup. The Design and Evolution of C++ (Addison-Wesley, 1994).

Note(注意)

If no exception may be thrown, use noexcept or its equivalent throw().

如果不會拋出任何異常,使用noexcept或者和它等價的throw()

Enforcement(實施建議)

Flag every exception specification.

標記所有的拋出異常聲明。

“C++中為什么不要使用拋異常聲明”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

c++
AI

界首市| 彰武县| 梁河县| 平昌县| 三明市| 武威市| 金塔县| 陆丰市| 克什克腾旗| 平山县| 井研县| 吕梁市| 内江市| 康乐县| 营口市| 临湘市| 湘西| 岑溪市| 洛川县| 西平县| 临桂县| 玉树县| 田阳县| 水城县| 丹巴县| 德江县| 浪卡子县| 波密县| 蕲春县| 微山县| 宿松县| 巩义市| 房产| 康保县| 双辽市| 广宗县| 微博| 大渡口区| 崇阳县| 大连市| 绥芬河市|