Ü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!
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