91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

甘肃省| 时尚| 武宁县| 晋城| 明水县| 遂昌县| 肇源县| 宜君县| 高陵县| 邵阳县| 铜陵市| 昌邑市| 响水县| 清新县| 雷州市| 涿鹿县| 元氏县| 洪湖市| 乐陵市| 湘潭市| 岑溪市| 兖州市| 新建县| 张北县| 南开区| 会东县| 太谷县| 开远市| 东阳市| 隆德县| 抚远县| 蕉岭县| 新巴尔虎左旗| 汝州市| 大竹县| 彭泽县| 沙湾县| 辛集市| 济源市| 孟州市| 贵港市|