Kürzlich hörte ich einen Vortrag von Herb Sutter, der meinte, dass die Gründe für die Ablehnung std::vector
y std::string
por const &
sind weitgehend verschwunden. Er schlug vor, eine Funktion wie die folgende zu schreiben, ist jetzt vorzuziehen:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
Ich verstehe, dass die return_val
ist zum Zeitpunkt der Rückkehr der Funktion ein rWert und kann daher mit der sehr billigen Move-Semantik zurückgegeben werden. Allerdings, inval
ist immer noch viel größer als die Größe einer Referenz (die in der Regel als Zeiger implementiert ist). Dies liegt daran, dass eine std::string
hat verschiedene Komponenten, darunter einen Zeiger auf den Heap und ein Mitglied char[]
für die Optimierung kurzer Zeichenfolgen. Es scheint mir also, dass die Übergabe per Referenz immer noch eine gute Idee ist.
Kann jemand erklären, warum Herb dies gesagt haben könnte?