我看过很多关于在函数返回值上使用std::move
的讨论(像这样(,我知道在这些情况下没有必要。但是,如果我想在接收如下代码所示的函数输出时使用std::move
语义,该怎么办:
std::vector<double> funcA()
{
std::vector<double> out(10000, 0.0);
return out;
}
int main()
{
auto out = std::move(funcA());
return 0;
}
这是std::move
的一个好用例吗?我的理解是,这里的move
可以避免返回向量的副本,尤其是当向量大小非常大时。如果我错了,请纠正我。非常感谢!
这是
std::move
的一个好用例吗?
否。
在良好的用例中,std::move
是在左值上调用的。这使编译器可以在大多数情况下(但不是全部(将该值视为临时*。
您正在临时拨打std::move
。告诉编译器在大多数情况下(但不是所有情况下(将您的临时视为临时并不能为编译器提供新功能,反而会夺走它们。
*By";"临时";,我的意思是prvalue