接收功能输出时使用std::move



我看过很多关于在函数返回值上使用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

最新更新