中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C++不能拋出異常怎么解決

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

這篇文章主要介紹“C++不能拋出異常怎么解決”,在日常操作中,相信很多人在C++不能拋出異常怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++不能拋出異常怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

E.25:如果不能拋出異常,模仿RAII方式進行資源管理

Reason(原因)

即使不和異常一起使用,RAII通常是最好的,最系統化的處理資源的方式。

Note(注意)

使用異常的錯誤處理是C++中完全、系統化處理非局部錯誤的唯一方式。通常,非侵入式發出錯誤信號以便構造一個對象需要使用異常。以無法忽視的方式發出錯誤信號需要異常。如果你無法使用異常,盡你所能模擬它。

很多關于異常的大量恐懼都是被誤導的。當在沒有被指針或復雜的控制結構搞亂的代碼環境中使用異常時,異常處理幾乎總是可以接受的(無論是時間還是空間維度),幾乎總是可以帶來更好的代碼。當然,想象一個異常處理機制的良好實現,它不存在于任何系統。還是存在不屬于上述問題,但由于其他原因而不能使用異常的情況。某些硬實時系統就是例子之一:一個操作必須在固定時間內完成并得到正確或錯誤的結果。如果沒有適當的時間評價工具,異常很難滿足這個要求。這樣的系統(例如飛行控制系統)通常也會禁止使用動態(堆)內存。

因此,關于錯誤處理,主要的準則是“使用異常和RAII”。這個部分內容處理以下情況:要么你無法獲得異常的高效實現,要么你的代碼是老鼠窩一樣的舊代碼(例如,大量的指針,病態定義的所有權,大量的基于測試錯誤的非系統化錯誤處理),這時無法引入簡單和系統化的異常處理。在譴責異常或抱怨異常的成本過高之前,考慮使用錯誤代碼時的成本和復雜度。如果你擔心性能,進行測量(而不是無根據的懷疑,譯者注)。

Example(示例)

假設你想編寫如下代碼:

void func(zstring arg)
{
   Gadget g {arg};
   // ...
}

如果gadget無法正確構建,func會因為異常退出。如果你無法拋出異常,我們可以通過給Gadget增加一個valid成員函數來模擬RAII風格的資源管理。

error_indicator func(zstring arg)
{
   Gadget g {arg};
   if (!g.valid()) return gadget_construction_error;
   // ...
   return 0;   // zero indicates "good"
}

這里的問題當然是調用者必須記得檢查返回值。

Enforcement(實施建議)

可能(僅僅)適用這個想法的特定版本:例如,在資源句柄構建之后系統化檢查valid()。

到此,關于“C++不能拋出異常怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

c++
AI

潞城市| 汝城县| 大埔县| 安徽省| 遂昌县| 延安市| 西充县| 苏尼特左旗| 资阳市| 榆社县| 天门市| 泽普县| 镶黄旗| 临颍县| 五华县| 赤水市| 新龙县| 济源市| 昭觉县| 康乐县| 左云县| 商都县| 清丰县| 益阳市| 新密市| 利辛县| 南昌市| 怀远县| 台南县| 临泽县| 潜江市| 名山县| 钟祥市| 库车县| 宜城市| 永吉县| 洛浦县| 南城县| 昔阳县| 松潘县| 通榆县|