Qual é a melhor maneira de retornar string em C ++?

Minha pergunta é simples: se eu tenho alguma classe Man e eu quero definir a função de membro que retorna o nome do homem, qual das duas variantes a seguir devo preferir?

Primeiro:

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

Segundo:

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

A primeira variante é ineficiente porque faz cópias desnecessárias (variável local -> valor de retorno -> variável na parte esquerda da atribuição).

A segunda variante parece bastante eficiente, mas me faz chorar para escrever

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

em vez de simples

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

Então, qual variante eu preferiria e qual é o trade-off adequado entre eficiência e conveniência / legibilidade?

Desde já, obrigado.

questionAnswers(7)

yourAnswerToTheQuestion