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:
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());
}
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 beide 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:
Obwohl „Willst du Geschwindigkeit? Übergeben von Werten“ 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. Es wird empfohlen, ein Profil zu erstellen, um die tatsächlichen Auswirkungen auf die Leistung zu ermitteln.
Zusätzliche Ressourcen:
[Scott Meyers GN13-Vortrag](https://www.youtube.com /watch?v=uk3-zmJWt-E) (Zeitrahmen 8:10 und 8:56)[Juanchopanzas Blog: „Wollen Sie Geschwindigkeit? Gehen Sie nicht (immer) am Wert vorbei“]
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3