Jaki jest najlepszy sposób na zwrócenie ciągu znaków w C ++?

Moje pytanie jest proste: jeśli mam jakąś klasę Man i chcę zdefiniować funkcję składową, która zwraca imię człowieka, który z następujących dwóch wariantów powinienem preferować?

Pierwszy:

<code>string name();
</code>

Druga:

<code>void name(/* OUT */ string &name);
</code>

Pierwszy wariant jest nieco nieefektywny, ponieważ tworzy niepotrzebne kopie (zmienna lokalna -> wartość zwracana -> zmienna w lewej części przypisania).

Drugi wariant wygląda całkiem wydajnie, ale sprawia, że ​​płaczę, by pisać

<code>string name;
john.name(name);
</code>

zamiast prostego

<code>string name(john.name());
</code>

Więc jaki wariant powinienem preferować i jaki jest właściwy kompromis między wydajnością a wygodą / czytelnością?

Z góry dziękuję.

questionAnswers(7)

yourAnswerToTheQuestion