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