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

溫馨提示×

溫馨提示×

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

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

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

京山县| 鄂托克旗| 社会| 仪征市| 鹰潭市| 南通市| 浮山县| 永昌县| 财经| 宁国市| 区。| 盘锦市| 揭阳市| 任丘市| 长葛市| 南宁市| 子洲县| 五寨县| 大关县| 西畴县| 习水县| 资阳市| 崇州市| 隆昌县| 石棉县| 小金县| 旺苍县| 茂名市| 平山县| 新龙县| 乐平市| 五峰| 凯里市| 瑞安市| 红桥区| 县级市| 龙口市| 南木林县| 永康市| 罗城| 河间市|