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