Heim >Backend-Entwicklung >C++ >Warum geben C-Kopierzuweisungsoperatoren eine Referenz (oder Const-Referenz) zurück?

Warum geben C-Kopierzuweisungsoperatoren eine Referenz (oder Const-Referenz) zurück?

DDD
DDDOriginal
2024-12-13 22:25:16877Durchsuche

Why Do C   Copy Assignment Operators Return a Reference (or Const Reference)?

Warum ist die Rückgabe einer Referenz/Konstantenreferenz für den Kopierzuweisungsoperator erforderlich?

In C gibt der Kopierzuweisungsoperator normalerweise eine Referenz zurück oder ein konstanter Verweis auf sich selbst. Diese Entwurfswahl ergibt sich aus Leistungsüberlegungen und vermeidet unnötiges Kopieren.

Betrachten Sie das folgende Beispiel:

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

a3 = a2;

Angenommen, der Kopierzuweisungsoperator „operator=“ hat eine Kopie des neuen Objekts zurückgegeben. In diesem Fall würde jede Zuweisungsoperation die Erstellung einer temporären Kopie und die anschließende Zerstörung dieser Kopie nach der Zuweisung auslösen.

A a3 = a2; // Creates a temporary copy of a2

Durch die Rückgabe einer Referenz oder einer konstanten Referenz wird die Zuweisungsoperation jedoch zu einer Kopie viel effizienter. Die Daten werden direkt von einem Objekt auf ein anderes kopiert, ohne dass temporäre Kopien erstellt und zerstört werden müssen.

A& operator=(const A& a) { /* ... */ }
a3 = a2; // Copies data directly from a2 without creating a temporary copy

Durch die Rückgabe einer Referenz oder einer Konstantenreferenz wird außerdem sichergestellt, dass der Operator verkettet werden kann. Im obigen Beispiel würde die Anweisung a = b = c korrekt funktionieren, da der Zuweisungsoperator eine Referenz auf das aufrufende Objekt zurückgibt.

Wenn der Operator dagegen eine Kopie zurückgibt, wäre eine Verkettung nicht möglich. Die Anweisung a = b = c würde einen Kompilierungsfehler erzeugen, da die Zuweisung von c zu a eine Kopie erfordern würde, während die Zuweisung von b zu a bereits eine Kopie erstellt hätte.

Daher ist die Rückgabe einer Referenz oder einer Konstante Der Verweis des Kopierzuweisungsoperators ist sowohl für die Leistung als auch für die korrekte Verkettung mehrerer Zuweisungen von entscheidender Bedeutung.

Das obige ist der detaillierte Inhalt vonWarum geben C-Kopierzuweisungsoperatoren eine Referenz (oder Const-Referenz) 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