Rule F.18 suggests you should always pass parameters by X&& and std::move them.
However, in the case where you have a function that receives multiple parameters and it keeps a copy of all of them (a constructor, maybe), I believe the better way is to pass them by value and then std::move them. This also saves you the trouble of adding a Cartesian product of overloads with const X&.
For example:
class Foo {
Foo(std::vector<int> a, std::vector<int> b): _a(std::move(a)), _b(std::move(b)) {}
private:
std::vector<int> _a;
std::vector<int> _b;
};
Rule F.18 suggests you should always pass parameters by
X&&andstd::movethem.However, in the case where you have a function that receives multiple parameters and it keeps a copy of all of them (a constructor, maybe), I believe the better way is to pass them by value and then
std::movethem. This also saves you the trouble of adding a Cartesian product of overloads withconst X&.For example: