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 ?

Pourquoi les opérateurs d'affectation de copie C renvoient-ils des références au lieu de copies ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 04:15:09438parcourir

Why Do C   Copy Assignment Operators Return References Instead of 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn