[問題] exception 疑問

作者: dreamboat66 (小嫩)   2019-05-05 00:18:19
一直對於 要不要寫noexcept 感到很疑惑
常看到文章說 "理論上" move cstor / assignment 應該要加上noexcept
其實在寫一些簡單賦值的建構子 也應該可以加上noexcept
但實際看一些比較大型的專案 也沒有說真的都有寫
而且我對於到底寫 跟 不寫 除了讓讀者有差別外
實際上有什麼效能上的差異嗎?
或者是我有什麼簡單的rule可以遵循
例如 建構子就該寫 or 用到xxxx就不該寫
另一方面
寫上了noexcept這關鍵字後 要是這function真的不小心exception了
外面就算寫了catch 還無法catch的到 必死無疑, 那我倒不如不寫來的好?
而且實際上寫一個function 你根本也不肯定你用的任何API到底throw/不throw exception
1. 可能他不會throw 但他沒寫noexcept
2. 可能他會throw 但他也沒寫comment描述
基於上面兩個原因我根本不太有機會能大膽的說我這function noexcept
3. 幾乎stl的api都會有exception的可能 或是你只要new 都很可能會有bad allocate
這幾乎讓noexcept更難被使用 (可能我錯得離譜 但目前我觀念真的覺得不知怎麼使用
也從沒實際上寫過)
另外
https://en.cppreference.com/w/cpp/language/except_spec
其實我不太懂為什麼這東西要被deprecated...
有不好嗎? 如果不能用了 我是沒有任何手段描述我這函數可能throw 什麼東西出去嗎?
我目前只能想到 透過寫document 寫comment去描述....這樣反而不明確了
請大家給予觀念上的指證
謝謝
作者: sarafciel (Cattuz)   2019-05-05 03:52:00
作者: xavier13540 (柊 四千)   2019-05-06 10:53:00
盡量宣告move ctor/assignment成noexcept的其中一個原因是提高STL container的效率 如果一個typename的move ctor/assignment不是noexcept 在realloc時就只能call copy ctor/assignment

Links booklink

Contact Us: admin [ a t ] ucptt.com