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