noexcept说明符和编译器优化

时间:2013-03-17 04:59:24

标签: c++ c++11 compiler-optimization noexcept

我读过关于noexcept说明符和编译器优化的不清楚的事情。指定noexcept时,编译器可以优化:

  • 编译时间(编译速度更快)。
  • 执行时间(代码运行得更快)。
  • 或两者兼而有之?
  • 或者没有?

1 个答案:

答案 0 :(得分:4)

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

  

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

(引自using-noexcept


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


我看不出编译时如何受到noexcept-specifiers的严重影响。但是,生成的运行时可以快得多。