源码

首页 » 归档 » 源码 » c – 我应该返回一个右值引用(通过std :: m…

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的帮助下返回值?

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/c-woyinggaifanhuiyigeyouzhiyinyongtongguostd-m.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 26, 2019 at 08:49 下午

热评文章