694 Stimmen

Sind die Tage der Übergabe von const std::string & als Parameter vorbei?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X