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不存在时执行。