[问题] 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