关于使用 noexcept 有多少关心的争论在工作中出现了。我们都知道 noexcept 并没有真正为编译器的优化器做很多事情,除了编译器必须假设的外部定义的代码可能会抛出,因为它不知道它的实现,所以标记事物的唯一真正的其他性能优势noexcept 用于使用std::move_if_noexcept<>的代码,假设它主要是 STL 容器及其算法。
因此评估是这样的:不要使用noexcept,除非:
编译器不知道可调用的实现的外部函数和类。
移动构造函数、移动赋值运算符并交换任何可能包含在 STL 容器中的类型。
否则不要担心。
这是一个公平的评价吗?如果某些东西不是例外,STL 中是否还有其他地方可以生成更优化的代码?如果是这样,这是哪个 STL 实现,需要将什么标记为 noexcept 才能使其工作,以及带来哪些性能优势(更少的内存分配,更低的复杂性)?
编辑:将 CashCow 的建议更改为措辞。