Время жизни переменной

#include <iostream>


using namespace std;

int& in()
{
    int a = 2;
    return a;
}

int main()
{
    std::cout << in();
    return 0;
}

В выводе я получаю 2. Но разве не должно быть Undefined behavior? Ведь переменная a локальная, а после выполнения функции уничтожиться? И возвращается ссылка на переменную


Ответы (2 шт):

Автор решения: nyekitka

Ну тут действительно возникает UB, но то что у вас выводится 2, не значит, что его нет. UB означает, что в ситуации в которой он возник, компилятор может повести себя как угодно (например, вывести 2). Хотя мне интересно, в каком это у вас компиляторе безобидно вывелась 2. Обычно должно выскакивать предупреждение -wreturn-local-addr.

→ Ссылка
Автор решения: Harry

Неопределенное поведение - оно такое неопределенное....

Понимаете, вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени.

И то, что после нескольких переходов вы остались живы и здоровы - является ли основанием говорить, что "на красный переходить можно, я проверял!"?

→ Ссылка