C++ noexcept说明符和编译器优化
我读过一些关于noexcept说明符和编译器优化的不清楚的东西。指定C++ noexcept说明符和编译器优化,c++,c++11,compiler-optimization,noexcept,C++,C++11,Compiler Optimization,Noexcept,我读过一些关于noexcept说明符和编译器优化的不清楚的东西。指定noexcept时,编译器可能会优化: 编译时间(更快的编译) 执行时间(代码运行速度更快) 或者两者都有 还是没有 noexpect的最初原因是,如果规范不允许调用函数抛出,则库可以在内部使用更快的移动构造函数 接下来,当您的类型的move构造函数和move赋值用noexcept注释时,可以在STL vector之类的容器中实现大的性能优化。当STL实用程序std::move_如果_noexcept检测到您的移动没有抛出,它
noexcept
时,编译器可能会优化:
- 编译时间(更快的编译)
- 执行时间(代码运行速度更快)
- 或者两者都有
- 还是没有
此外,如果编译器知道由于noexpect说明符不能引发异常,则不必为堆栈展开生成额外的代码
我看不出noexcept说明符对编译时有多大的影响。不过,生成的运行时可以快得多。编译器不会基于
noexcept
优化任何内容。只有你的代码可以优化东西,通过强制编译器根据noexcept
是否可用来选择不同的函数。@Nicolas我知道使用noexcept的目的不是为了优化。但在四处搜索时,我在这方面找到了各种各样的答案(),我仍然不清楚编译器到底可以(或应该)选择什么,甚至还不清楚现在说什么还为时过早。