Noexcept说明符和编译器优化
noexcept specifier and compiler optimizations
我读过一些关于noexcept说明符和编译器优化的不清楚的东西。当指定noexcept
时,编译器可以优化:
- 编译时间(更快的编译)。
- 执行时间(代码运行更快)。
- 还是两个?
- 或没有?
noexpect的最初原因是,如果规范不允许调用函数抛出,则允许库在内部使用更快的move-构造函数。
接下来,当类型的move构造函数和move赋值用noexcept注释时,可以在STL vector等容器中实现较大的性能优化。当STL实用程序std::move_if_noexcept检测到您的移动不抛出时,它将使用这些安全移动而不是复制某些操作(如调整大小)。对于存储数百万个元素的容器,这将实现巨大的优化。
(引用自using-noexcept)
此外,如果编译器知道noexpect说明符不会抛出异常,则不必为堆栈展开生成额外的代码。
我看不出noexcept说明符对编译时有什么实质性的影响。但是最终的运行时间要快得多。
相关文章:
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++编译器是否优化了顺序静态变量读取?
- VS2017调试器:没有地址,可能是由于编译器优化
- 何时允许编译器优化复制构造函数
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- static_assert有助于优化编译器吗?
- 哪个优化编译器开关使调试非常困难
- 优化编译器可以添加std::move吗
- VisualStudio 优化编译器版本 19.00.23506.0 中存在明显的编译错误
- C++是否允许优化编译器忽略对 for 条件的副作用
- 优化编译器能否从 std::unique_ptr 中消除所有运行时成本
- Microsoft c++优化编译器不断崩溃
- 优化编译器如何决定何时展开循环以及展开多少循环
- 有一个很好的测试c++优化编译器
- Mac上的g++链接时间优化-编译器/链接器错误
- visual_itoa_s一直在杀死c++优化编译器,为什么?
- Microsoft C/C++ 优化编译器编译到什么
- 优化编译器消除bug