Übergabe per Wert vs. Übergabe per R-Wert-Referenz
Die Entscheidung zwischen Übergabe per Wert oder Übergabe per R-Wert-Referenz für Funktionsparameter hängt von mehreren Faktoren ab.
Wert übergeben
-
(Widget w)
- Erstellt eine Kopie von den Eingabeparameter, wobei das Original unverändert bleibt.
- Beinhaltet einen impliziten Kopiervorgang, der bei großen oder komplexen Objekten ineffizient sein kann.
- Übernimmt den Besitz des Parameters, auch wenn er dadurch nicht geändert wird .
Rvalue-Referenz übergeben
-
(Widget&& w)
- Initialisiert den Parameter zwangsweise mit einem R-Wert (z. B. einem ablaufenden temporären Objekt) und verhindert so einen Kopiervorgang.
- Erfordert die explizite Deklaration von Kopien mit std::move, wenn der Aufrufer eine Kopie wünscht .
- Deaktiviert alle Änderungen am Rückgabewert, die in der Kopie des Aufrufers widergespiegelt werden.
Hauptunterschiede
-
Eigentum kopieren: Die Wertübergabe schreibt vor, dass der Parameter kopiert werden muss, während die Übergabe per R-Wert-Referenz es der Funktion ermöglicht, den Parameter zu verschieben, wodurch in einigen Fällen ein zusätzlicher Aufruf des Verschiebungskonstruktors entfällt.
-
Schnittstellensemantik: R-Wert-Referenzen geben an, dass die Funktion beabsichtigt, den Besitz des Werts zu übernehmen und nicht für dessen Fortbestand verantwortlich ist.
-
Effizienz: Übergabe von R-Wert Referenz kann in Fällen effizienter sein, in denen der Aufrufer keine Kopie des Eingabeobjekts benötigt.
Auswahl der richtigen Methode
Verwenden Sie die Wertübergabe, wenn :
- Die Funktion benötigt eine Kopie oder modifizierte Version des Eingabeobjekts.
- Das Eingabeobjekt ist klein oder kostengünstig zu kopieren.
Pass verwenden durch R-Wert-Referenz, wenn:
- Die Funktion muss den Besitz übernehmen und das Eingabeobjekt ändern.
- Das Eingabeobjekt ist groß oder teuer zu kopieren.
- Der Aufrufer erfordert keine Kopie des Eingabeobjekts.
Das obige ist der detaillierte Inhalt vonWann sollte man in C die Referenz „Übergabe nach Wert' oder „Übergabe nach R-Wert' wählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!