Пожалуйста, взгляните на следующий простой код:
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
как объект, а не ссылку?