【发布时间】:2018-02-09 14:41:00
【问题描述】:
假设我有以下课程:
#include <vector>
class Foo
{
public:
Foo(const std::vector<int> & a, const std::vector<int> & b)
: a{ a }, b{ b } {}
private:
std::vector<int> a, b;
};
但现在我想说明构造函数的调用者可能将临时对象传递给它的情况,并且我想将这些临时对象正确移动到 a 和 b。
现在我真的必须再添加 3 个构造函数吗,其中 1 个以 a 作为右值引用,其中 1 个以 b 作为右值引用,1 个只有右值引用参数?
当然,这个问题可以推广到任何数量的值得移动的参数,并且所需的构造函数的数量将是 arguments^2 2^arguments。
这个问题也适用于所有函数。
这样做的惯用方式是什么?还是我在这里完全遗漏了一些重要的东西?
【问题讨论】:
-
我见过的一个解决方案是按值获取两个参数,然后移动它们。我看到这个有争议,但我没有来源了:/
-
哦,是的,你是对的。我将编辑我的答案:p。
标签: c++11 move-semantics rvalue-reference