出于性能原因,我有兴趣确保在函数的返回值上执行RVO。什么会阻止这个优化由现代C ++编译器(如gcc,clang和msvc 2015)执行,我应该担心什么?
澄清编辑:我感兴趣的是识别(希望最终通过某种形式的静态分析,但后来可能会出现)当一个特定的值与昂贵的复制构造函数(但一个廉价的移动构造函数)从一个返回函数和RVO未执行(意味着正在执行不必要的复制构造函数调用)。当std :: move()调用可以避免这种昂贵的操作时尤其如此。
我特别感兴趣的是它实际上由编译器执行的情况,而不是C ++ 11规范允许的情况,我认为它比实际实现的情况更广泛。我也对编译器自动使用移动构造函数而不是复制构造函数(如果允许)的情况感兴趣。