7

我已经阅读了关于 noexcept 说明符和编译器优化的不清楚的内容。指定noexcept编译器时可能会优化:

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

1 回答 1

8

noexpect 的最初原因是使库能够在内部使用更快的移动构造函数,如果调用函数不允许按规范抛出。

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

(引自using-noexcept


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


我看不出 noexcept 说明符如何显着影响编译时间。不过,由此产生的运行时间可能会快得多。

于 2013-03-17T13:42:36.290 回答