作者dreamboat66 (小嫩)
看板C_and_CPP
标题[问题] exception 疑问
时间Sun May 5 00:18:19 2019
一直对於 要不要写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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1556986702.A.647.html
2F:推 xavier13540: 尽量宣告move ctor/assignment成noexcept的其中一个 05/06 10:53
3F:→ xavier13540: 原因是提高STL container的效率 如果一个typename的 05/06 10:53
4F:→ xavier13540: move ctor/assignment不是noexcept 在realloc时就只 05/06 10:53
5F:→ xavier13540: 能call copy ctor/assignment 05/06 10:53