Noexcept说明符和编译器优化

noexcept specifier and compiler optimizations

本文关键字:优化 编译器 说明符 Noexcept      更新时间:2023-10-16

我读过一些关于noexcept说明符和编译器优化的不清楚的东西。当指定noexcept时,编译器可以优化:

  • 编译时间(更快的编译)。
  • 执行时间(代码运行更快)。
  • 还是两个?
  • 或没有?

noexpect的最初原因是,如果规范不允许调用函数抛出,则允许库在内部使用更快的move-构造函数。

接下来,当类型的move构造函数和move赋值用noexcept注释时,可以在STL vector等容器中实现较大的性能优化。当STL实用程序std::move_if_noexcept检测到您的移动不抛出时,它将使用这些安全移动而不是复制某些操作(如调整大小)。对于存储数百万个元素的容器,这将实现巨大的优化。

(引用自using-noexcept)


此外,如果编译器知道noexpect说明符不会抛出异常,则不必为堆栈展开生成额外的代码。


我看不出noexcept说明符对编译时有什么实质性的影响。但是最终的运行时间要快得多。