Heim > Backend-Entwicklung > C++ > Sollten wir „std::string' trotzdem als „const std::string&'-Referenz übergeben?

Sollten wir „std::string' trotzdem als „const std::string&'-Referenz übergeben?

DDD
Freigeben: 2024-12-10 00:27:16
Original
340 Leute haben es durchsucht

Should We Still Pass `std::string` by `const std::string&` Reference?

Die Obsoleszenz des Passing const std::string& Referenzen: Herb Sutters Perspektive

In einem kürzlichen Vortrag brachte Herb Sutter die abnehmende Relevanz von zum Ausdruck Übergabe von std::vector und std::string durch const&. Er schlug vor, dass der traditionelle Ansatz:

std::string do_something(const std::string& inval)
Nach dem Login kopieren

jetzt weniger wünschenswert ist im Vergleich zu:

std::string do_something(std::string inval)
Nach dem Login kopieren

Obwohl anerkannt ist, dass Inval seine Größe behält, basiert Herbs Argument auf Szenarien mit Funktionsverkettung. Betrachten Sie das Beispiel, in dem A B aufruft, das wiederum C aufruft:

Fall 1: Übergabe durch const-Referenz

void B(const std::string& str) { C(str); }
void C(const std::string& str) { /* Use str but do not store it */ }
Nach dem Login kopieren

Wenn C Speicher benötigt, ist ein Kopiervorgang erforderlich wird notwendig:

void C(const std::string& str) { m_str = str; }
Nach dem Login kopieren

Die Verwendung von const& verhindert jedoch, dass C auf die zugrunde liegenden Daten zugreift, die in seine verschoben wurden Parameter.

Fall 2: Wertübergabe

void B(std::string str) { C(std::move(str)); }
void C(std::string str) { m_str = std::move(str); }
Nach dem Login kopieren

In diesem Szenario wird die Zeichenfolge durch die Funktionsaufrufe verschoben, um unnötige Kopien zu vermeiden. Der Leistungsaufwand beim Verschieben in einen Wert wird durch die Vorteile der Vermeidung von Speicherzuweisungen für kleine Zeichenfolgen mit Short String Optimization (SSO) ausgeglichen.

Letztendlich hängt die Wahl zwischen der Übergabe per Konstantenreferenz oder Wert von der spezifischen Verwendung ab Fall und die Präferenz des Entwicklers für Speicherzuteilungseffizienz gegenüber potenziellen Leistungseinbußen.

Das obige ist der detaillierte Inhalt vonSollten wir „std::string' trotzdem als „const std::string&'-Referenz übergeben?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage