C ++ получить функцию возврата по ссылке - PullRequest
0 голосов
/ 30 марта 2020

Допустим, у нас есть функция

int increment(int x) {
  return x+1;
}

Есть ли разница в получении возвращаемого значения с помощью

const int foo = increment(8);

ИЛИ

const int& foo = increment(8);

?

Что если тип возвращаемого значения является более сложным и более значительным объектом? Имеет ли смысл использовать ссылку, чтобы избежать ненужной копии?

Я думал, что возвращаемое значение выходит за рамки функции (increment в этом примере). Так что одна копия нужна в любом случае. Правильно?

1 Ответ

2 голосов
/ 30 марта 2020

Есть ли разница в получении возвращаемого значения с помощью ...

Это не имеет значения в том смысле, что оба имеют одинаковое наблюдаемое поведение.

Это субъективно имеет значение в том смысле, что использование ссылки является более сложным, и ее понимание требует знания большего количества языковых правил. Пожизненное продление временных значений - это несколько неясное правило языка, которое, насколько я знаю, плохо понимается новичками.

Что если тип возврата является более сложным и более значительным объектом?

Не имеет значения.

Имеет ли смысл использовать ссылку, чтобы избежать ненужной копии?

Копирование не избежать. Вместо локальной переменной эталонная версия создает временный объект, а ссылка привязывается к временному. Здесь нет смысла использовать ссылку.

...