Maison >développement back-end >C++ >Pourquoi les opérateurs d'affectation de copie C renvoient-ils des références au lieu de copies ?
La nécessité d'un retour de référence/const dans l'opérateur d'affectation de copie
L'opérateur d'affectation de copie en C soulève des questions concernant son type de retour. Pourquoi renvoie-t-il une référence ou une référence const au lieu d'une copie du nouvel objet ? Pour clarifier ce concept, considérons le scénario suivant :
A a1(param); A a2 = a1; A a3; a3 = a2; // The problematic line
En supposant que l'opérateur d'affectation de copie est défini comme suit :
A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
Le renvoi d'une référence à partir de l'opérateur d'affectation de copie présente des avantages significatifs sur le retour d'une copie. En renvoyant une référence, cela permet un travail minimal, car il copie uniquement les valeurs d'un objet à un autre.
Cependant, le retour par valeur crée une surcharge supplémentaire. Chaque fois que l'opérateur d'affectation est appelé, il appelle un constructeur et un destructeur, ce qui entraîne une consommation inutile de ressources. Par exemple :
A& operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice. Efficient.
En revanche :
A operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
Par conséquent, renvoyer une référence ou une référence const à partir de l'opérateur d'affectation de copie optimise les performances en évitant la création et la destruction inutiles d'objets, améliorant ainsi l'efficacité et la maintenabilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!