问题描述
关于 noexcept
的用法有相当(非常)popular question,但它来自 8 年前,其他流行的答案也同样古老。看到其他人在不同项目中的一些代码,在我看来,noexcept
并没有成为许多开发人员编写的非常普遍的东西。
除了移动构造函数和移动赋值运算符之外,使用 noexcept
的好处似乎还不够清楚,无法为每个函数考虑(“我是否应该在此处添加 noexcept
?”)。
有人发现了这个说明符的一个很好的用法,可以分享他们的经验吗?
解决方法
除了您链接的问题中的答案(今天仍然具有相关性)之外,C++ Core Guidelines 中还列出了许多您可能想要查看的特定案例:
- F.6: If your function must not throw,declare it
noexcept
- C.37: Make destructors
noexcept
- C.66: Make move operations
noexcept
- C.85: Make
swap
noexcept
- C.86: Make
==
symmetric with respect of operand types andnoexcept
- C.89: Make a
hash
noexcept
- E.12: Use
noexcept
when exiting a function because of athrow
is impossible or unacceptable
正如 Discussion: Usage of noexcept
部分中持续缺乏内容(截至 2021 年 3 月)所指出的那样,这不是一个容易总结的主题。