Скажем, у меня есть некоторая функция:
Foo GetFoo(..)
{
...
}
Предположим, что мы не знаем, как реализована эта функция, и внутренности Foo (например, это может быть очень сложный объект). Однако мы знаем, что функция возвращает Foo по значению и что мы хотим использовать это возвращаемое значение как const.
Вопрос: Было бы хорошей идеей хранить возвращаемое значение этой функции как const &
?
const Foo& f = GetFoo(...);
вместо <
const Foo f = GetFoo(...);
Я знаю, что компиляторы будут выполнять оптимизацию значений значений и могут перемещать объект, а не копировать его, поэтому в конце const &
могут не иметь никаких преимуществ. Однако мой вопрос в том, есть ли недостатки? Почему я не должен просто наращивать мышечную память, чтобы всегда использовать const &
для хранения возвращаемых значений, учитывая, что мне не нужно полагаться на оптимизацию компилятора и тот факт, что даже перемещение операции может быть дорогостоящим для сложных объектов.
Растягивая это до крайности, почему я не должен всегда использовать const &
для всех переменных, которые неизменны в моем коде? Например,
const int& a = 2;
const int& b = 2;
const int& c = c + d;
Помимо более подробных, есть ли недостатки?