当不抛出是零成本时,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
以保留强大的异常保证。
如果您的实现具有零成本(如果未抛出任何内容)异常模型,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
以保留强大的异常保证。