我有一个非常基本的问题:使用 std::move
返回 std::vector<A>
是个好主意吗?例如:
class A {};
std::vector<A> && func() {
std::vector<A> v;
/* fill v */
return std::move(v);
}
我应该以这种方式返回 std::map
, std::list
.. etc…?
原文由 Koban 发布,翻译遵循 CC BY-SA 4.0 许可协议
您声明一个函数以通过 r 值引用返回 - 这几乎不应该这样做(如果您通过引用返回本地对象,您最终会得到一个悬空引用)。而是将函数声明为按值返回。这样,调用者的值将由函数返回的 r 值构造。返回的值也将绑定到任何引用。
其次,不,您 不应 使用显式返回
std::move
因为这将阻止编译器使用 RVO 。没有必要,因为如果可能,编译器会自动将返回的任何左值引用转换为右值引用。更多信息: