Тип автоматической переменной при присвоении ей значения из функции, возвращаемое значение которой является ссылкой

Проверьте следующий простой код:

#include <iostream>

class A
{
    long *context;
public:
    A(long i)
    {
        context = new long;
        *context = i;
    }

    long& getContext()
    {
        return *context;
    }
};

A a(1234);

int main(void)
{
    auto v = a.getContext();
    std::cout << v << std::endl;
    return 0;
}

Возвращаемое значение A::getContext() является ссылкой, а тип auto переменной vlong, а не long&:

....
auto v = a.getContext();
....

Какие дефекты, если тип v является ссылкой?


person Nan Xiao    schedule 01.11.2017    source источник
comment
Хм? Дефекта нет. Правила вывода auto предпочитают типы значений. В конце концов, вы определяете объект.   -  person StoryTeller - Unslander Monica    schedule 01.11.2017
comment
Не имеет отношения к вашему вопросу, но почему context является указателем? Даже если это была структура в вашем реальном коде, редко возникает необходимость сделать ее указателем.   -  person Some programmer dude    schedule 01.11.2017
comment
@Someprogrammerdude: Простой пример, демонстрирующий проблему.   -  person Nan Xiao    schedule 01.11.2017
comment
Ну, вам действительно не нужен указатель для этого.   -  person Some programmer dude    schedule 01.11.2017
comment
Не могли бы вы уделить время разъяснению вашего вопроса? v не является ссылкой, поэтому мне непонятно, о чем вы спрашиваете.   -  person StoryTeller - Unslander Monica    schedule 01.11.2017
comment
@StoryTeller Мне просто интересно в auto v = a.getContext();, почему тип v - long, а не long&. Есть ли у компилятора какие-либо соображения для такого поведения? Спасибо!   -  person Nan Xiao    schedule 01.11.2017
comment
Там у него дубликат. Пожалуйста, прочтите это.   -  person StoryTeller - Unslander Monica    schedule 01.11.2017