„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:
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!