J'utilise cette classe, pas écrit par moi et je ne peux pas changer son code:Déplacer dans une fonction qui prend référence const lvalue
class A {
private:
Val d_val;
public:
void setVal(const Val& val) { d_val = val; }
const Val& getVal() const { return d_val; }
};
Val
soutient la proposition mais la classe A
a été écrit sans cela à l'esprit . Puis-je en quelque sorte éviter une copie de val
dans le scénario? Je doute que std::move(val)
en setVal
fonctionnera car il ne prend pas une référence de valeur r.
A a;
Val val;
// populate val
a.setVal(val); // I don't need val after here
Malheureusement, vous ne pouvez pas passer d'un objet 'const'. C'est pourquoi Herb Sutter a suggéré "que la vitesse veuille passer par la valeur". Avec ce constructeur, vous ne pouvez pas éviter une construction de copie ou une affectation de copie. – WhiZTiM