何时应该在函数返回值上使用std :: move?

何时应该在函数返回值上使用std :: move?

在这种情况下


struct Foo {};

Foo meh() {

  return std::move(Foo());

}

我很确定移动是不必要的,因为新创建的Foo将是一个xvalue。


但在这种情况下呢?


struct Foo {};

Foo meh() {

  Foo foo;

  //do something, but knowing that foo can safely be disposed of

  //but does the compiler necessarily know it?

  //we may have references/pointers to foo. how could the compiler know?

  return std::move(foo); //so here the move is needed, right?

}

我认为需要采取行动吗?


蓝山帝景
浏览 2052回答 3
3回答

至尊宝的传说

在这两种情况下都不需要这样做。在第二种情况下,std::move因为你按值返回一个局部变量是多余的,编译器会理解,因为你不再使用那个局部变量,所以它可以被移动而不是被复制。
打开App,查看更多内容
随时随地看视频慕课网APP