【发布时间】:2015-11-19 20:15:11
【问题描述】:
我有第一个类似这样的构造函数
X::X(const std::vector<int>& v1, const std::vector<int>& v2, const std::vector<int>& v3) : _v1(v1), _v2(v2), _v3(v3){
} // _v1 , _v2 and _v3 are members
对于这种行为,我还应该实现移动构造函数版本
X::X(std::vector<int>&&, std::vector<int>&&, std::vector<int>&&);
但也可以像这样混合使用 const 左值引用和右值引用的参数类型
X::X(const std::vector<int>&, std::vector<int>&&, const std::vector<int>&);
是实现所有可能的构造函数的最佳实践,即 2^3 吗?
【问题讨论】:
-
任何不以
X&&作为唯一参数的构造函数都不是移动构造函数,它只是另一个常规构造函数。一般如果要优化这种类型的构造函数,应该使用模板和完美转发。 -
你的第二个例子不是move constructor,虽然我明白你的意思。一种可能是使用“通用引用”和 sfinae 来约束类型(类似于these lines),但我觉得这有点混淆。
标签: c++ constructor arguments