Heim  >  Artikel  >  Backend-Entwicklung  >  Wertübergabe oder Referenz: Wann ist „Geschwindigkeit gewünscht? Wertübergabe“ tatsächlich wahr?

Wertübergabe oder Referenz: Wann ist „Geschwindigkeit gewünscht? Wertübergabe“ tatsächlich wahr?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 01:34:03448Durchsuche

  Passing by Value or Reference: When is

„Willst du Geschwindigkeit? An Werten vorbeigehen“ – Untersuchung der Auswirkungen auf die Leistung

Scott Meyers‘ Aussage „Willst du Geschwindigkeit? An Werten vorbeigehen“ wirft Fragen auf über die Leistungsvorteile der Übergabe von Objekten nach Wert statt nach Referenz. In diesem Zusammenhang beinhaltet die Übergabe als Wert einen Kopiervorgang, während die Übergabe als Referenz unnötige Kopien vermeidet.

Betrachten Sie das folgende Beispiel mit den Strukturen 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) {}
};</code>

Im Konstruktor von Der Argumentname wird in ein temporäres Objekt kopiert, bevor der Verschiebungskonstruktor auf std::string aufgerufen wird, um mem_name zu initialisieren. Im Konstruktor von Y ist der Argumentname eine konstante Referenz, es wird jedoch trotzdem eine Kopie erstellt, um mem_name zu initialisieren. Deshalb führt das Potenzial für Optimierungen, wie z. B. Return Value Optimization (RVO). Eine genauere Betrachtung zeigt jedoch, dass das Ergebnis von der Art des übergebenen Arguments (L-Wert oder R-Wert) abhängt:

    L-Werte
  • : Sowohl X als auch Y führen eine Kopie durch (in X beim Initialisieren von Name, in Y beim Initialisieren von mem_name), gefolgt von einer Verschiebungsoperation in X.
  • Rvalues
  • : eine Kopie.
  • Im Allgemeinen ist eine Verschiebung schneller als die Übergabe eines Zeigers, was im Wesentlichen das ist, was die Übergabe als Referenz bewirkt. Daher schneidet X bei R-Werten besser ab als Y, während die Leistung bei L-Werten ähnlich ist.

Es ist wichtig zu beachten, dass dies keine universelle Regel ist und Optimierungen je nach Compiler und Plattform variieren können. Um im Einzelfall die optimale Vorgehensweise zu ermitteln, empfiehlt sich eine Profilierung.

Das obige ist der detaillierte Inhalt vonWertübergabe oder Referenz: Wann ist „Geschwindigkeit gewünscht? Wertübergabe“ tatsächlich wahr?. 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