Heim > Backend-Entwicklung > C++ > Warum geben C-Kopierzuweisungsoperatoren Referenzen anstelle von Kopien zurück?

Warum geben C-Kopierzuweisungsoperatoren Referenzen anstelle von Kopien zurück?

Linda Hamilton
Freigeben: 2024-12-21 04:15:09
Original
450 Leute haben es durchsucht

Why Do C   Copy Assignment Operators Return References Instead of Copies?

Die Notwendigkeit der Referenz-/Const-Referenz-Rückgabe im Kopierzuweisungsoperator

Der Kopierzuweisungsoperator in C wirft Fragen bezüglich seines Rückgabetyps auf. Warum wird eine Referenz oder eine konstante Referenz anstelle einer Kopie des neuen Objekts zurückgegeben? Um dieses Konzept zu verdeutlichen, betrachten Sie das folgende Szenario:

A a1(param);
A a2 = a1;
A a3;

a3 = a2; // The problematic line
Nach dem Login kopieren

Angenommen, der Kopierzuweisungsoperator ist wie folgt definiert:

A A::operator=(const A& a)
{
    if (this == &a)
    {
        return *this;
    }
    param = a.param;
    return *this;
}
Nach dem Login kopieren

Die Rückgabe einer Referenz vom Kopierzuweisungsoperator hat erhebliche Vorteile über die Rückgabe eines Exemplars. Durch die Rückgabe einer Referenz wird ein minimaler Arbeitsaufwand ermöglicht, da nur Werte von einem Objekt in ein anderes kopiert werden.

Die Rückgabe nach Wert verursacht jedoch zusätzlichen Aufwand. Bei jedem Aufruf des Zuweisungsoperators werden ein Konstruktor und ein Destruktor aufgerufen, was zu unnötigem Ressourcenverbrauch führt. Zum Beispiel:

A& operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice. Efficient.
Nach dem Login kopieren

Im Gegensatz:

A operator=(const A& rhs) { /* ... */ };

a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
Nach dem Login kopieren

Daher optimiert die Rückgabe einer Referenz oder einer Konstantenreferenz vom Kopierzuweisungsoperator die Leistung, indem unnötige Objekterstellung und -zerstörung vermieden und die Effizienz gesteigert wird und Wartbarkeit des Codes.

Das obige ist der detaillierte Inhalt vonWarum geben C-Kopierzuweisungsoperatoren Referenzen anstelle von Kopien zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage