Heim > Backend-Entwicklung > C++ > Ist die Rückgabe per R-Wert-Referenz immer effizienter als die Rückgabe per L-Wert-Referenz?

Ist die Rückgabe per R-Wert-Referenz immer effizienter als die Rückgabe per L-Wert-Referenz?

Barbara Streisand
Freigeben: 2024-12-24 00:15:10
Original
133 Leute haben es durchsucht

Is Returning by Rvalue Reference Always More Efficient Than Returning by Lvalue Reference?

Rückgabe per R-Wert-Referenz: Ist das effizienter?

Die Rückgabe eines Objekts per R-Wert-Referenz ist möglicherweise nicht immer effizienter als die Rückgabe per L-Wert Referenz. Es kann zu baumelnden Referenzen führen, wenn es sich bei dem zurückgegebenen Objekt um ein temporäres Objekt handelt, das nach der Rückkehr der Funktion zerstört wird.

Der Originalcode:

Der bereitgestellte Codeausschnitt versucht zurückzukehren eine verschobene R-Wert-Referenz auf ein temporäres Beta_ab-Objekt:

Beta_ab&& Beta::toAB() const {
    return move(Beta_ab(1, 1));
}
Nach dem Login kopieren

Dies wird nicht empfohlen, da es eine fehlende Referenz zurückgibt. Um einen temporären Wert ordnungsgemäß in den Rückgabewert zu verschieben, sollte die Funktion einen Wert und keine R-Wert-Referenz zurückgeben:

Beta_ab Beta::toAB() const {
    return Beta_ab(1, 1);
}
Nach dem Login kopieren

R-Wert-Referenzen mit anderen Funktionen verwenden:

Die Rückgabe einer R-Wert-Referenz kann in bestimmten Situationen von Vorteil sein. Wenn es beispielsweise eine getAB()-Funktion gibt, die häufig für temporäre Objekte aufgerufen wird, kann es effizienter sein, eine R-Wert-Referenz zurückzugeben:

struct Beta {
  Beta_ab ab;
  Beta_ab const& getAB() const& { return ab; }
  Beta_ab &&getAB() && { return move(ab); }
};
Nach dem Login kopieren

In diesem Beispiel ist move erforderlich, da ab nicht erforderlich ist ein lokaler automatischer oder ein temporärer R-Wert. Der Ref-Qualifizierer && stellt sicher, dass die zweite getAB()-Funktion auf temporären R-Werten aufgerufen wird, was zu einer Verschiebung statt einer Kopie führt.

Schlussfolgerung:

Beim Zurückkehren by rvalue-Referenz kann in manchen Fällen effizient sein, sie sollte jedoch mit Vorsicht verwendet werden, um fehlende Referenzen zu vermeiden. Die Rückgabe eines Werts wird im Allgemeinen für Funktionen bevorzugt, die temporäre Objekte zurückgeben.

Das obige ist der detaillierte Inhalt vonIst die Rückgabe per R-Wert-Referenz immer effizienter als die Rückgabe per L-Wert-Referenz?. 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