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

63

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

Первый:

string name();

Во-вторых:

void name(/* OUT */ string &name);

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

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

string name;
john.name(name);

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

string name(john.name());

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

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

Error: User Rate Limit Exceeded hmjd
Error: User Rate Limit Exceededconst std::string&Error: User Rate Limit Exceeded Christian Rau
Error: User Rate Limit Exceededname()Error: User Rate Limit Exceededconst: string name() const;. hmjd
Error: User Rate Limit Exceeded James Kanze
Error: User Rate Limit ExceededconstError: User Rate Limit Exceeded James Kanze

Ваш Ответ

7   ответов
9

inline const std::string& name() const { return this->name; }

Error: User Rate Limit ExceededsetNameError: User Rate Limit ExceededsetFirstNameError: User Rate Limit Exceededfullname()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded tonytony
Error: User Rate Limit Exceeded tonytony
5

Error: User Rate Limit Exceeded

1

Error: User Rate Limit Exceeded

2

Error: User Rate Limit Exceeded

string name();

Error: User Rate Limit ExceededSearch for Return Value Optimization).

25

Error: User Rate Limit Exceeded

string name();

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

Error: User Rate Limit Exceeded

void name(std::string& s);

Error: User Rate Limit ExceededsError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
52

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededextremelyError: User Rate Limit ExceededefficientError: User Rate Limit Exceeded tonytony
2

Error: User Rate Limit ExceededMeasureError: User Rate Limit Exceeded

Error: User Rate Limit Exceededstd::stringError: User Rate Limit ExceededmeasureError: User Rate Limit ExceededthatError: User Rate Limit Exceeded

Похожие вопросы