Open
Description
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;
};