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
Libérer: 2024-12-21 04:15:09
original
461 Les gens l'ont consulté

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
Copier après la connexion

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;
}
Copier après la connexion

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.
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal