странное поведение ссылки в 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); была константной, а функция возвращала по значению (из комментариев, спасибо), этот код был бы правильным (но вылезла бы ошибка при попытке сделать присваивание) - работало бы правило продления времени жизни временного объекта константной ссылкой.