问题描述
如果您的实现具有零成本(如果未抛出任何异常)异常模型,那么noexcept
指定符是否无用?缺少noexcept
会导致后果的例子是什么?
解决方法
如果您的实现具有零成本(如果未抛出任何异常)异常模型,那么
noexcept
指定符是否无用?
不,即使异常对性能完全没有影响,noexcept
还是有用的。
一个例子是noexcept
可以表示可以使用哪种算法。例如,使用std::move_if_noexcept
或许多标准type_traits的算法可能会根据noexcept
的存在而表现不同。
这可能对诸如std::vector
之类的常用功能产生重大影响,如果您元素的move构造函数不是noexcept
,则这些功能会慢得多。如果移动构造函数不是std::vector
,noexcept
将在重新分配时复制所有元素,而不是移动它们,以保留强异常保证。