【发布时间】:2018-12-15 16:29:40
【问题描述】:
在question about returning temporaries 回复后,我注意到第二个回复略有不同。
它不是按值返回,而是按右值引用返回。 您能解释一下这些方法之间的区别以及它们面临的风险吗?
struct Bar
{
Bar& doThings() & {return *this;}
// Returning rvalue reference
Bar&& doThings() && {return std::move(*this);}
// Alternative: Returning by value
//Bar doThings() && {return std::move(*this);}
std::unique_ptr<int> m_content; // A non-copyable type
};
【问题讨论】:
-
那是因为
std::unique_ptr没有实现复制行为。它只能移动。 -
对于这种情况没关系,因为在被调用者中返回的值无论如何都是右值。
-
如果调用者在不使用返回值的情况下执行
doThings();那么第三个版本将破坏被处理的对象,而前两个不会 -
标签: c++ reference rvalue return-by-reference return-by-value