Willst du Geschwindigkeit? Wertübergabe: Überlegungen zur Leistung
Das Prinzip „Geschwindigkeit wünschen? Betrachten Sie zur Veranschaulichung den folgenden Code mit den Klassen X und Y:
<code class="cpp">struct X { std::string mem_name; X(std::string name) : mem_name(std::move(name)) {} }; struct Y { std::string mem_name; Y(const std::string &name) : mem_name(name) {} }; int main() { X(foo()); Y(foo()); }</code>
Hier gibt foo() eine temporäre Zeichenfolge zurück, die sowohl an X- als auch an Y-Konstruktoren übergeben wird. Wenn X mem_name initialisiert, ruft es den Verschiebungskonstruktor von std::string auf, der möglicherweise das Kopieren des Strings vermeidet. Wenn Y jedoch mem_name initialisiert, muss es die Zeichenfolgenreferenz kopieren.
L-Wert vs. R-Wert-Argumente:
Wenn ein L-Wert (nicht temporär) übergeben wird, werden sowohl X und Y führt eine Kopie durch. Zusätzlich führt X einen Zug aus. Bei R-Werten (temporären Werten) darf ein Zeiger (entspricht der Übergabe als Referenz). Daher weist X eine ähnliche Leistung wie Y für l-Werte und eine bessere Leistung für r-Werte auf.
Achtung:
Während „Willst du Geschwindigkeit? Pass by Value“ eine überzeugende Idee ist, es sollte mit Bedacht angewendet werden. Es ist wichtig, den spezifischen Kontext und den potenziellen Mehraufwand zu berücksichtigen, der mit dem Kopieren großer Datenstrukturen verbunden ist. Zur Ermittlung der tatsächlichen Auswirkungen auf die Leistung wird eine Profilierung empfohlen.
Zusätzliche Ressourcen:
[Scott Meyers GN13 Talk](https://www.youtube.com /watch?v=uk3-zmJWt-E) (Zeitrahmen 8:10 und 8:56)[juanchopanzas Blog: „Willst du Geschwindigkeit? Don't (Always) Pass By Value“]
Das obige ist der detaillierte Inhalt vonWillst du Geschwindigkeit? Wertübergabe: Ist Copy Elision immer der Leistungssieger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!