странное поведение ссылки в Visual Studio

#include <iostream>
using namespace std;
int& sum(int a, int b)
{
    int c = a + b;
    return c;
}
int main()
{ 
    int &rezult = sum(4, 3);
    int* pointRezult = &rezult;
    cout << rezult << " " << &rezult << endl;
    *pointRezult = 3;
    cout << rezult << " " << &rezult <<endl;
    rezult = 5;
    cout << rezult <<" " << &rezult;
    return 0;
} 

Каламбур в том, что это работает. И главный вопрос: почему? rezult ссылается на память, которая вне его доступа, ведь переменная c из sum уничтожилась.

IDE: Visual Studio 2019 в стоке.


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

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

Неопределенное поведение может реализовываться произвольным образом, в том числе и тем, при котором программа ведет себя так, как ожидает программист.

Если бы ссылка int &rezult = sum(4, 3); была константной, а функция возвращала по значению (из комментариев, спасибо), этот код был бы правильным (но вылезла бы ошибка при попытке сделать присваивание) - работало бы правило продления времени жизни временного объекта константной ссылкой.

→ Ссылка