C ++ 11 auto: что, если он получает постоянную ссылку?

Обратите внимание на следующий простой код:

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 как объект, а не ссылку?

71
задан Nate Kohl 11 May 2012 в 01:02
поделиться