C++ 接收函数输出时使用std::move

C++ 接收函数输出时使用std::move,c++,c++11,move,C++,C++11,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
的讨论,我知道在这些情况下没有必要这样做。但是如果我想在接收函数输出时使用
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::vector funcA()
{
标准:矢量输出(10000,0.0);
返回;
}
int main()
{
auto out=std::move(funcA());
返回0;
}
对于
std::move
,这是一个很好的用例吗?我的理解是
move
这里可以避免返回向量的副本,特别是当向量大小非常大时。如果我错了,请纠正我。非常感谢

对于
std::move
,这是一个很好的用例吗

没有

在良好的用例中,
std::move
上调用。这使编译器可以在大多数情况下(但不是所有情况下)将该值视为临时值*

您正在临时*上调用
std::move
。告诉编译器在大多数情况下(但不是所有情况下)将您的临时文件视为临时文件不会给编译器带来新的功能,而是会将它们带走


*我的意思是“暂时的”。

不,这不是一个好案例。这是一种悲观。只要按价值返回它,并用值接收它,拷贝很可能会被删除(除非你使用了一个非常古老的C++版本/编译器)。这是一个例子。只创建了一个对象。没有复制或移动。您的代码可能会导致比没有移动时性能更差。这是因为编译器将在move不存在时执行。