Mar*_* Ba 7 c++ diagnostics compiler-directives copy-elision
复制省略是一种简洁的优化技术,在某些情况下,依赖复制省略实际上比"手动"传递参考更快.
因此,我们假设您已经确定了一个关键代码路径,您依赖于编译器为代码路径执行复制省略以获得最佳性能的事实.
但现在您依赖于编译器优化.
是否有任何(编译器特定的,显然)方式确保实际执行复制省略并且如果无法执行复制省略,编译器(或其他工具)会生成警告/错误?
(我正在考虑远远类似于Visual C++的东西,__forceinline如果标记的函数没有被编译器内联,则会产生警告.)
在 C++1z(预计 2017 年)中,需要某些情况来保证复制省略:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html
根据公共 cppreference.com 编译器功能支持 wiki GCC 7+ 和 Clang 4+ 确保这一点。
幸运的是,优化方面不需要启用较新的语言支持,因为它是纯粹的优化(遵循较旧的语言标准津贴)。
另外,在应用优化时允许复制构造函数不可用可能需要在编译期间启用较新的语言标准,或者使用不需要严格一致性的松散或扩展模式(例如可能是 GCC -fpermissive)。
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |