我已经阅读了关于 noexcept 说明符和编译器优化的不清楚的内容。指定noexcept
编译器时可能会优化:
- 编译时间(更快的编译)。
- 执行时间(代码运行速度更快)。
- 或两者?
- 还是没有?
我已经阅读了关于 noexcept 说明符和编译器优化的不清楚的内容。指定noexcept
编译器时可能会优化:
noexpect 的最初原因是使库能够在内部使用更快的移动构造函数,如果调用函数不允许按规范抛出。
接下来,当您的类型的移动构造函数和移动赋值使用 noexcept 注释时,可以在 STL 矢量等容器中实现大的性能优化。当 STL 实用程序 std::move_if_noexcept 检测到您的动作没有抛出时,它将使用这些安全动作而不是副本进行某些操作(如调整大小)。在容器存储数百万个元素的情况下,这将实现巨大的优化。
(引自using-noexcept)
此外,如果编译器知道由于 noexpect 说明符而不会引发异常,则编译器不必为堆栈展开生成额外的代码。
我看不出 noexcept 说明符如何显着影响编译时间。不过,由此产生的运行时间可能会快得多。