一直對於 要不要寫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去描述....這樣反而不明確了
請大家給予觀念上的指證
謝謝