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;
}
createItem()
有效返回而無需致電std::move
。如果我要用它構造一個對象,我應該移動被調用者的返回值嗎?
createWrapper()
使用返回值createItem()
並且想要調用Wrapper::Wrapper(Item&&)
構造函數。
是否需要使用Wrapper result{std::move(createItem())};
或將Wrapper result{createItem()};
夠用?
它是一個prvalue呢? – 0x499602D2 2014-10-01 13:06:56
@ 0x499602D2:是的,但這與此問題無關。 – 2014-10-01 13:09:55