Heim > Backend-Entwicklung > C++ > Hauptteil

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

Susan Sarandon
Freigeben: 2024-10-27 01:34:03
Original
447 Leute haben es durchsucht

  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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!