姬長信(Redy)

c – 我应该返回一个右值引用(通过std :: m…


一个C++Next blog post
A compute(…)
{
    A v;
    …
    return v;
}

如果A具有可访问的副本或移动构造函数,则编译器可以选择忽略该副本.否则,如果A具有移动构造函数,则移动v.否则,如果A具有复制构造函数,则复制v.
?否则,将发出编译时错误.

我以为我应该总是返回没有std :: move的值
因为编译器能够找出用户的最佳选择.但另一个例子来自博客文章

Matrix operator+(Matrix&& temp, Matrix&& y)
  { temp += y; return std::move(temp); }

这里std :: move是必需的,因为y必须被视为函数内的左值.

啊,在研究这篇博文之后,我的脑袋几乎爆炸了.我尽力理解推理,但学的越多,我就越困惑.为什么我们应该在std :: move的帮助下返回值?