Why does this need an explicit std::move?

后端 未结 4 818
失恋的感觉
失恋的感觉 2020-12-18 20:57

Let\'s say I got a Foo class containing an std::vector constructed from std::unique_ptr objects of another class, Bar.

4条回答
  •  抹茶落季
    2020-12-18 21:32

    Basically, every object which has a name is an lvalue. When you pass an object to a function using an rvalue reference the function actually sees an lvalue: it is named. What the rvalue reference does, however, indicate is that it came from an object which is ready to be transferred.

    Put differently, rvalue references are assymmetrical:

    • they can only receive rvalues, i.e., either temporary objects, objects about to go away, or objects which look as if they are rvalues (e.g., the result of std::move(o))
    • the rvalue reference itself looks, however, like an lvalue

提交回复
热议问题