Пожалуйста, взгляните на следующий простой код:
class Foo
{
public:
Foo(){}
~Foo(){}
Foo(const Foo&){}
Foo& operator=(const Foo&) { return *this; }
};
static Foo g_temp;
const Foo& GetFoo() { return g_temp; }
Я попытался использовать auto следующим образом:
auto my_foo = GetFoo();
Я ожидал, что my_foo будет постоянной ссылкой на Foo, которая является возвращаемым типом функции. Однако тип auto Foo, а не ссылка. Кроме того, my_foo создается путем копирования g_temp. Это поведение не так очевидно для меня.
Чтобы получить ссылку на Foo, мне нужно было написать вот так:
const auto& my_foo2 = GetFoo();
auto& my_foo3 = GetFoo();
Вопрос: Почему auto выводит возвращаемый тип GetFoo как объект, а не ссылку?