Объекты, созданные в области действия функции, уничтожаются при возврате этой функции.Возвращенная ссылка больше не действительна из-за возврата времени на сайт вызова.
Это означает, что определение функции в вашем вопросе недействительно.Он возвращает ссылку на объект, который исчезнет к тому времени, когда что-либо получит шанс использовать возвращенную ссылку.
Может быть, стоит отметить, что временные объекты возвращаются значением дожить до конца полного выражения.Так для следующего кода:
struct Test
{
Test() { std::cout << "Test constructed\n"; }
~Test() { std::cout << "Test destroyed\n"; }
};
std::ostream& operator<<(std::ostream& os, const Test& t) {
os << "Test output";
return os;
}
Test func() {
return {};
}
int main() {
std::cout << func() << "\nAfter\n";
}
Вывод будет следующим:
Test constructed
Test output
After
Test destroyed
Поскольку объект Test
, возвращаемый func
, живет до концаполного cout
выражения.