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()};
足够?
答案 0 :(得分:8)
这里不需要std::move
。函数调用表达式的值已经是 rvalue 。
答案 1 :(得分:0)
std::move
:
BigMatrix BuildBigMatrix()
{
...
return someBigMatrix; // *moved* outside of function
}