Каков наилучший способ вернуть строку в C ++?

Мой вопрос прост: если у меня есть некоторый класс Man, и я хочу определить функцию-член, которая возвращает имя человека, какой из следующих двух вариантов я предпочту?

Первый:

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

Во-вторых:

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

Первый вариант является неэффективным, потому что он делает ненужные копии (локальная переменная -> возвращаемое значение -> переменная в левой части присваивания).

Второй вариант выглядит довольно эффектно, но заставляет плакать

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

вместо простого

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

Итак, какой вариант я предпочитаю и каков правильный компромисс между эффективностью и удобством / удобочитаемостью?

Заранее спасибо.

Ответы на вопрос(7)

Ваш ответ на вопрос