如果我要用它构造一个对象,我应该移动一个被调用者的返回值吗?

Vit*_*meo 4 c++ move return-value move-semantics c++11

class Item { };

class Wrapper
{
    Item i;
    Wrapper(const Item& mI) : i{mI} { }
    Wrapper(Item&& mI) : i{std::move(mI)} { }
};

Item createItem()
{
    Item result;
    // ...
    return result; // No `std::move` needed here
}

Wrapper createWrapper()
{
    Wrapper result{createItem()}; // `std::move(createItem())` ?
    return result;
}
Run Code Online (Sandbox Code Playgroud)

createItem()无需致电即可高效返回std::move.

createWrapper()使用返回值createItem()并希望调用Wrapper::Wrapper(Item&&)构造函数.

是否有必要使用Wrapper result{std::move(createItem())};Wrapper result{createItem()};足够?

Mik*_*our 8

这里没有必要std::move.函数调用表达式的已经是右值.