Я изучаю lvalue / rvalue, и есть пример с lvalue:
int& foo();
foo() = 42; // ok, foo() is an lvalue
Обычно люди позволяют foo () возвращать глобальную переменную или статическую переменную внутри его тела, но если мы определяем локальную переменную внутри тела foo, она также работает (с предупреждением: ссылка на стековую память, связанную с локальной переменная 'i' вернула [-Wreturn-stack-address] ):
#include <iostream>
using namespace std;
int &foo(){int i=7; return i;};
int main() {
foo() = 42;
return 0;
}
Почему это разрешено в C ++, это закрытие?