Мой вопрос прост: если у меня есть класс Man, и я хочу определить функцию-член, которая возвращает имя человека, какой из следующих двух вариантов я должен предпочесть?
Во-первых:
string name();
Во-вторых:
void name(/* OUT */ string &name);
Первый вариант является неэффективным, поскольку он делает ненужные копии (локальная переменная → возвращаемое значение → переменная в левой части назначения).
Второй вариант выглядит довольно эффектно, но он заставляет меня плакать, чтобы написать
string name;
john.name(name);
вместо простого
string name(john.name());
Итак, какой вариант я должен предпочесть и каков надлежащий компромисс между эффективностью и удобством/удобочитаемостью?
Спасибо заранее.