您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++怎么使用異常發信號”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么使用異常發信號”吧!
It should not be possible to ignore an error because that could leave the system or a computation in an undefined (or unexpected) state. This is a major source of errors.
錯誤可能會讓系統或計算處于沒有定義(或者意外)的狀態,應該杜絕錯誤被忽略的可能性。忽略對錯誤的處理是大部分問題的主要原因。
Example(示例)
int printf(const char* ...); // bad: return negative number if output fails
template <class F, class ...Args>
// good: throw system_error if unable to start the new thread
explicit thread(F&& f, Args&&... args);
What is an error?
什么是錯誤?
錯誤意味著功能無法達成它對外宣稱的目的(包括建立事后條件)。忽略錯誤的調用代碼可能造成錯誤的結果或者沒有定義的系統狀態。例如,無法連接到遠程服務器不是它自己造成的錯誤:服務器可能因為各種原因拒絕連接,因此自然的做法就是返回一個結果讓調用者確認。如果無法連接被認為是錯誤,這個失敗應該拋出異常。
Exception(異常)
Many traditional interface functions (e.g., UNIX signal handlers) use error codes (e.g., errno
) to report what are really status codes, rather than errors. You don't have a good alternative to using such, so calling these does not violate the rule.
很多傳統的函數(例如UNIX信號量處理函數)使用錯誤碼(例如errno)報告實際的狀態。由于沒有好的選項來代替它們,因此調用這些函數不算違反規則。
Alternative(可選項)
If you can't use exceptions (e.g., because your code is full of old-style raw-pointer use or because there are hard-real-time constraints), consider using a style that returns a pair of values:
如果不能使用異常(例如,因為代碼到處都是舊風格的原始指針,或者存在硬實時約束),考慮使用返回結果對的風格。
int val;
int error_code;
tie(val, error_code) = do_something();
if (error_code) {
// ... handle the error or exit ...
}
// ... use val ...
譯者注:tie是C++引入的新特性,用于解包同樣是C++11引入的tuple數據。
This style unfortunately leads to uninitialized variables. Since C++17 the "structured bindings" feature can be used to initialize variables directly from the return value:
這個方式有一個缺點就是會導致未初始化變量。使用C++17之后導入的結構化綁定功能可以通過返回值直接初始化變量。
auto [val, error_code] = do_something();if (error_code) { // ... handle the error or exit ...}// ... use val ...
Note(注意)
We don't consider "performance" a valid reason not to use exceptions.
我們不認為“性能”是不使用異常的合理原因。
Often, explicit error checking and handling consume as much time and space as exception handling.
通常,清楚的錯誤檢查和處理消耗的時間和空間和異常處理相同(譯者注:換個說法,目前很多代碼中所謂高效率錯誤處理實際上是偷工減料)
Often, cleaner code yields better performance with exceptions (simplifying the tracing of paths through the program and their optimization).
通常,整潔的代碼使用異常會帶來更好的性能(簡化跟蹤程序執行路徑和優化)
A good rule for performance critical code is to move checking outside the critical part of the code (checking).
對于性能敏感的代碼來說,將檢查部分移到代碼的關鍵部分之外是一個好方法。
In the longer term, more regular code gets better optimized.
長期來說,有規律的代碼可以被更好地優化。
Always carefully measure before making performance claims.
在宣稱性能問題之前一定要仔細地考量。(譯者注:例如真的會有性能問題么?真的那么重要么?)
Enforcement(實施建議)
(Not enforceable) This is a philosophical guideline that is infeasible to check directly.
(非強制)這是一條事關編程哲學的準則,無法直接檢查。
Look for errno
.
選擇errno。
感謝各位的閱讀,以上就是“C++怎么使用異常發信號”的內容了,經過本文的學習后,相信大家對C++怎么使用異常發信號這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。