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

问题描述

如果您的实现具有零成本(如果未抛出任何异常)异常模型,那么noexcept指定符是否无用?缺少noexcept会导致后果的例子是什么?

解决方法

如果您的实现具有零成本(如果未抛出任何异常)异常模型,那么noexcept指定符是否无用?

不,即使异常对性能完全没有影响,noexcept还是有用的。

一个例子是noexcept可以表示可以使用哪种算法。例如,使用std::move_if_noexcept或许多标准type_traits的算法可能会根据noexcept的存在而表现不同。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...