經過幾年的教學,我即將創建自己的第一個真正的C++應用程序(一個2D遊戲)。我遇到的問題是很多時候教程經常跳過正確的錯誤處理技術(或者做最低限度的工作)。爲了嘗試學習錯誤處理的工作方式,我開始嘗試瞭解C錯誤代碼和errno
及其優缺點。在此之後,我查看了C++ 11的std::error_code
/std::error_condition
,但是我很難理解它們對errno等的重要性和改進。究竟是什麼使得像std::error_code
改進了errno
?std :: error_code/error_condition優於errno嗎?
1
A
回答
0
errno是一種非常糟糕的方式來處理今天的計算機中的錯誤,因爲它不是線程安全的。如果你想製作遊戲,你很可能需要線程。
std :: error_code實際上可以將errno包裝成可以將它們轉換爲自己的錯誤的附加改進。
看看https://www.youtube.com/watch?v=w7ZVbw2X-tE,我相信你會對error_code更有智慧。
關於免除的問題,請確保您對待他們是正確的。在嵌入式系統中,您通常無法承受例外,因爲您不知道他們將花費多少時間,他們將佔用更多空間。然而,在遊戲中,AAA遊戲公司確實不使用例外情況,但他們編寫了自己的特殊容器來實現這一點(例如參見EASTL和WG21-SG14庫和討論)。 如果您正在編寫您的第一款遊戲,請使用標準方法,包括例外情況,因爲您無法編寫自己的東西。如果拋出一個異常並且你沒有捕捉到它,你的程序將終止並學習。
確保自學如何寫現代 C++,至少使用C++ 14和物資,這都將減少與存儲的安全性和脫髮你的問題的功能;)
相關問題
- 1. `std :: string(strerror(errno))`危險嗎?
- 2. 相當於std :: set嗎?
- 3. C++:sqlite3使用errno代碼嗎?
- 4. Do Bundle優先於Routing嗎?
- 5. std :: copy/memcpy/memmove優化
- 6. 是std :: tuple需要使用空基類優化嗎?
- 7. UIPanGestureRecognizer優先於-touchesMoved:方法嗎?
- 8. 雅虎PlaceFinder API優於Google Geocode API嗎?
- 9. std :: vector比std :: unordered_set更快嗎?
- 10. 可以在成功時設置errno嗎?
- 11. 爲什麼`std :: common_type_t <std :: ostream&,std :: ostream&>`等於`std :: ostream`而不是`std :: ostream&`?
- 12. error_code vs errno
- 13. std :: vector用於std :: array初始化
- 14. 關於MySQL複製的Errno 1782
- 15. 優雅地停止一個std ::線程?
- 16. 的std ::移動與編譯器優化
- 17. std ::需要進行矢量優化
- 18. XAMPP(用於Windows)優於WampServer嗎?如果是這樣,爲什麼?
- 19. std :: move結果切片嗎?
- 20. 我可以扔`std :: bad_cast`嗎?
- 21. php有C++的std :: pair嗎?
- 22. 我應該在Unix上使用system_category或generic_category作爲errno嗎?
- 23. MVC3優於MVC2的優點
- 24. MySQLi優於MySQL的優勢
- 25. 我可以基於char *而不是文件創建std :: ifstream嗎?
- 26. 關於DLIB :: frontal_face_detector優化
- 27. 這是有效的優化嗎?
- 28. std :: vector與std :: list與std :: slist的相對性能?
- 29. IOError:[Errno socket error] [Errno 11004] getaddrinfo失敗
- 30. 優化mysql表嗎?
只是指出:你是否已經使用異常? –
由於可能的運行時間開銷和我的單線程遊戲的性能需求,我試圖迴避它們。 – Jason
'std :: error_code'更安全。 – AndyG