Проверьте следующий простой код:
#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
переменной v
— long
, а не long&
:
....
auto v = a.getContext();
....
Какие дефекты, если тип v
является ссылкой?
auto
предпочитают типы значений. В конце концов, вы определяете объект. - person StoryTeller - Unslander Monica   schedule 01.11.2017context
является указателем? Даже если это была структура в вашем реальном коде, редко возникает необходимость сделать ее указателем. - person Some programmer dude   schedule 01.11.2017v
не является ссылкой, поэтому мне непонятно, о чем вы спрашиваете. - person StoryTeller - Unslander Monica   schedule 01.11.2017auto v = a.getContext();
, почему типv
-long
, а неlong&
. Есть ли у компилятора какие-либо соображения для такого поведения? Спасибо! - person Nan Xiao   schedule 01.11.2017