我读过关于noexcept说明符和编译器优化的不清楚的事情。指定noexcept
时,编译器可以优化:
答案 0 :(得分:4)
noexpect的最初原因是如果不允许调用函数按规范抛出,则库允许内部使用更快的move-constructors。
接下来,当您的类型的移动构造函数和移动赋值使用noexcept注释时,可以在容器(如STL向量)中实现大的性能优化。当STL实用程序std :: move_if_noexcept检测到您的移动没有抛出它时,将使用这些安全移动而不是复制某些操作(如调整大小)。在容器存储数百万个元素的情况下,这将实现巨大的优化。
(引自using-noexcept)
此外,如果编译器知道由于noexpect说明符而不能抛出任何异常,则编译器不必为堆栈展开生成额外的代码。
我看不出编译时如何受到noexcept-specifiers的严重影响。但是,生成的运行时可以快得多。