У меня есть несколько вопросов по возвращению ссылки на локальную переменную из функции:
class A {
public:
A(int xx)
: x(xx)
{
printf("A::A()\n");
}
};
const A& getA1()
{
A a(5);
return a;
}
A& getA2()
{
A a(5);
return a;
}
A getA3()
{
A a(5);
return a;
}
int main()
{
const A& newA1 = getA1(); //1
A& newA2 = getA2(); //2
A& newA3 = getA3(); //3
}
Мои вопросы =>
-
Правильна ли реализация
getA1()
? Я чувствую, что это неверно, так как он возвращает адрес локальной переменной или временный. -
Какое из утверждений в
main
(1,2,3) приведет к неопределенному поведению? -
В
const A& newA1 = getA1();
гарантирует ли стандарт, что временная привязка константной ссылкой не будет уничтожена, пока ссылка не выйдет из области видимости?