当不抛出是零成本时,noexcept 是没用的吗?

Is noexcept useless when not throwing is zero-cost?

如果您的实现具有零成本(如果未抛出任何内容)异常模型,noexcept 说明符是否无用?缺少 noexcept 会产生后果的示例是什么?

Is the noexcept specifier useless if your implementation has a zero-cost (if nothing is thrown) exception model?

不,即使异常对性能没有任何影响,noexcept 也很有用。

一个例子是noexcept可以表示可以使用哪种算法。例如,使用 std::move_if_noexcept or many of the standard type_traits 的算法可能会根据 noexcept.

的存在而表现不同

这可能会对 std::vector 等常见功能产生重大影响,如果您的元素的移动构造函数不是 noexcept,则速度会慢得多。 std::vector 将在重新分配时复制所有元素而不是移动它们,如果移动构造函数不是 noexcept 以保留强大的异常保证。