我有一个非常基本的问题:使用
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
..等等吗?
您声明一个函数通过右值引用返回 - 这几乎不应该这样做(如果您通过引用返回本地对象,您最终将得到一个悬空引用)。相反,声明函数按值返回。这样,调用者的值将由函数返回的右值移动构造。返回的值也将绑定到任何引用。
其次,不,你不应该使用显式的std::move
返回,因为这会阻止编译器使用RVO
std::move()
时,启用优化的 gcc 和 clang 编译器都会生成相同的二进制代码。 只需返回一个值即可。但是,如果您为自定义类创建移动构造函数和移动
&&
,则使用
noexcept
和
operator=
说明符非常有用