[問題] exception 疑問

看板C_and_CPP (C/C++)作者 (小嫩)時間6年前 (2019/05/05 00:18), 編輯推噓1(104)
留言5則, 2人參與, 6年前最新討論串1/1
一直對於 要不要寫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

05/05 03:52, 6年前 , 1F

05/06 10:53, 6年前 , 2F
盡量宣告move ctor/assignment成noexcept的其中一個
05/06 10:53, 2F

05/06 10:53, 6年前 , 3F
原因是提高STL container的效率 如果一個typename的
05/06 10:53, 3F

05/06 10:53, 6年前 , 4F
move ctor/assignment不是noexcept 在realloc時就只
05/06 10:53, 4F

05/06 10:53, 6年前 , 5F
能call copy ctor/assignment
05/06 10:53, 5F
文章代碼(AID): #1SpRjEP7 (C_and_CPP)
文章代碼(AID): #1SpRjEP7 (C_and_CPP)