¿Cuál es la mejor manera de devolver una cadena en C ++?

Mi pregunta es simple: si tengo alguna clase Hombre y deseo definir una función miembro que devuelva el nombre de hombre, ¿cuál de las siguientes dos variantes preferiré?

Primero:

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

Segundo:

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

La primera variante es un poco ineficiente porque hace copias innecesarias (variable local -> valor de retorno -> variable en la parte izquierda de la asignación).

La segunda variante parece bastante eficiente pero me hace llorar para escribir

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

en lugar de simple

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

Entonces, ¿qué variante prefiero y cuál es la compensación adecuada entre eficiencia y conveniencia / legibilidad?

Gracias por adelantado.

Respuestas a la pregunta(7)

Su respuesta a la pregunta