這篇文章主要講解了“C++怎么使用異常發(fā)信號”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么使用異常發(fā)信號”吧!
我們提供的服務有:成都網(wǎng)站設計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、武川ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的武川網(wǎng)站制作公司
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.
錯誤可能會讓系統(tǒng)或計算處于沒有定義(或者意外)的狀態(tài),應該杜絕錯誤被忽略的可能性。忽略對錯誤的處理是大部分問題的主要原因。
Example(示例)
int printf(const char* ...); // bad: return negative number if output fails
template
// good: throw system_error if unable to start the new thread
explicit thread(F&& f, Args&&... args);
What is an error?
什么是錯誤?
錯誤意味著功能無法達成它對外宣稱的目的(包括建立事后條件)。忽略錯誤的調(diào)用代碼可能造成錯誤的結(jié)果或者沒有定義的系統(tǒng)狀態(tài)。例如,無法連接到遠程服務器不是它自己造成的錯誤:服務器可能因為各種原因拒絕連接,因此自然的做法就是返回一個結(jié)果讓調(diào)用者確認。如果無法連接被認為是錯誤,這個失敗應該拋出異常。
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.
很多傳統(tǒng)的函數(shù)(例如UNIX信號量處理函數(shù))使用錯誤碼(例如errno)報告實際的狀態(tài)。由于沒有好的選項來代替它們,因此調(diào)用這些函數(shù)不算違反規(guī)則。
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:
如果不能使用異常(例如,因為代碼到處都是舊風格的原始指針,或者存在硬實時約束),考慮使用返回結(jié)果對的風格。
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數(shù)據(jù)。
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之后導入的結(jié)構(gòu)化綁定功能可以通過返回值直接初始化變量。
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).
通常,整潔的代碼使用異常會帶來更好的性能(簡化跟蹤程序執(zhí)行路徑和優(yōu)化)
A good rule for performance critical code is to move checking outside the critical part of the code (checking).
對于性能敏感的代碼來說,將檢查部分移到代碼的關(guān)鍵部分之外是一個好方法。
In the longer term, more regular code gets better optimized.
長期來說,有規(guī)律的代碼可以被更好地優(yōu)化。
Always carefully measure before making performance claims.
在宣稱性能問題之前一定要仔細地考量。(譯者注:例如真的會有性能問題么?真的那么重要么?)
Enforcement(實施建議)
(Not enforceable) This is a philosophical guideline that is infeasible to check directly.
(非強制)這是一條事關(guān)編程哲學的準則,無法直接檢查。
Look for errno
.
選擇errno。
感謝各位的閱讀,以上就是“C++怎么使用異常發(fā)信號”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++怎么使用異常發(fā)信號這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!