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
Linda HamiltonOriginal
2024-12-21 04:15:09440Durchsuche

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

Angenommen, der Kopierzuweisungsoperator ist wie folgt definiert:

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

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.

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.

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!

Stellungnahme:
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