如果函数调用是return语句,编译器是否可以自动移动函数参数?

fun*_*mmy 5 c++ move-semantics c++11

在以下情况下,编译器可以自动移动函数参数v还是必须手动声明?

std::vector Filter(std::vector v);

void DoSomeStuffAndCallFilter(std::vector v)
{
  // do some stuff to v

  // can the compiler automatically std::move v in this call?
  // ie. return Filter(std::move(v));
  //
  return Filter(v);
}
Run Code Online (Sandbox Code Playgroud)

Ded*_*tor 7

在您的情况下,编译器可以在as-if规则下进行允许优化,因为它非常了解您的析构函数和复制构造函数,std::vector因此可以证明对可观察行为没有区别.

尽管如此,它仍然是"实施质量问题",并且取决于正在进行的重大优化.

  • @ fun4jimmy:我建议添加`std :: move`.它使程序员意图清晰,并且可以在所有编译器中可靠地工作. (3认同)