看板 C_and_CPP 關於我們 聯絡資訊
一直對於 要不要寫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去描述....這樣反而不明確了 請大家給予觀念上的指證 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.106.163 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1556986702.A.647.html
sarafciel: https://tinyurl.com/y5elm3tj 05/05 03:52
xavier13540: 盡量宣告move ctor/assignment成noexcept的其中一個 05/06 10:53
xavier13540: 原因是提高STL container的效率 如果一個typename的 05/06 10:53
xavier13540: move ctor/assignment不是noexcept 在realloc時就只 05/06 10:53
xavier13540: 能call copy ctor/assignment 05/06 10:53