Время жизни переменной
#include <iostream>
using namespace std;
int& in()
{
int a = 2;
return a;
}
int main()
{
std::cout << in();
return 0;
}
В выводе я получаю 2. Но разве не должно быть Undefined behavior? Ведь переменная a локальная, а после выполнения функции уничтожиться? И возвращается ссылка на переменную
Ответы (2 шт):
Ну тут действительно возникает UB, но то что у вас выводится 2, не значит, что его нет. UB означает, что в ситуации в которой он возник, компилятор может повести себя как угодно (например, вывести 2). Хотя мне интересно, в каком это у вас компиляторе безобидно вывелась 2. Обычно должно выскакивать предупреждение -wreturn-local-addr.
Неопределенное поведение - оно такое неопределенное....
Понимаете, вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени.
И то, что после нескольких переходов вы остались живы и здоровы - является ли основанием говорить, что "на красный переходить можно, я проверял!"?