我有一个非常基本的问题:返回 std::vector<A>
是个好主意吗?使用 std::move
?例如:
class A {};
std::vector<A> && func() {
std::vector<A> v;
/* fill v */
return std::move(v);
}
我应该返回 std::map
, std::list
.. 等...以这种方式?
最佳答案
你声明了一个通过右值引用返回的函数——这几乎永远不应该做(如果你通过引用返回局部对象,你最终会得到一个悬空引用)。而是声明函数按值返回。这样,调用者的值将由函数返回的右值构造。返回值也将绑定(bind)到任何引用。
其次,不,您应该不使用显式std::move
返回,因为这会阻止编译器使用RVO。 .没有必要,因为编译器会在可能的情况下自动将返回的任何左值引用转换为右值引用。
std::vector<A> func() {
std::vector<A> v;
/* fill v */
return v; // 'v' is converted to r-value and return value is move constructed.
}
更多信息:
关于c++ - 使用 std::move 返回 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44065808/