我有一堆返回vector<int>
的方法。它们不返回引用或指向vector<int>
的指针,因为返回的值不是类'state的一部分,它只是根据方法参数动态生成。
当我调用这样的方法时,我想避免调用vector<int>
复制构造函数。
vector<int> result = myClass.GenerateVectorOfInt(/* params */);
// Do something with the result;
最好的方法是什么?
这是否可以接受?或者还有其他更好或更优雅的解决方案。
vector<int> result = std::move(myClass.GenerateVectorOfInt(/* params */));
答案 0 :(得分:6)
你不需要做任何特别的事情,允许编译器在可行的情况下忽略副本。这称为“返回值优化”(RVO)。
即使没有发生RVO,C ++ 11也会强制将vector
移动到位,这很便宜,与其大小无关。 (通常这是1个指针和2个整数赋值。)因此向量将永远被复制,移动是最坏的情况。
如果由于任何原因RVO没有发生和,那么移动对于您的用例来说太昂贵了(极不可能),如果不更改功能签名,您无能为力;在呼叫点添加std::move
或类似内容将无济于事。