В следующем коде показаны две функции. f1() возвращает ссылку инициализированной локальной переменной в области функции, f2() возвращает значение инициализированной локальной переменной в области функций.Возврат ссылки на локальную переменную
Ожидается, что f2() будет хорошо работать, поскольку локально инициализированная переменная. Значение передается из стека в основной.
Ожидается, что f1() не будет работать, потому что ссылка на локальную переменную бесполезна из области действия. Однако для обеих функций выход кажется удовлетворительным.
Вот тестовый код;
#include <iostream>
using namespace std;
// function declarations
int& f1();
int f2();
int main()
{
cout << "f1: " << f1() << endl; // should not work!
cout << "f2: " << f2() << endl; // should work
return 0;
}
int& f1() // returns reference
{
int i = 10; // local variable
return i; // returns reference
}
int f2() // returns value
{
int i = 5; // local variable
return i; // returns value
}
Выход следующий:
f1: 10
f2: 5
Почему f1() работает нормально даже в том случае, если f1() возвращает ссылку на локальную переменную?
Потому что вы вызываете неопределенное поведение и делаете так, что небо - предел. – 101010
Потому что вам было ужасно повезло ... – Chiel
Что вы ожидали? – emlai