ссылка возврата C++ / стековая память [дубликат]

9
задан user1391 15 July 2010 в 03:41
поделиться

4 ответа

Поведение не определено. Вы не должны возвращать ссылки на локальные переменные.

11
ответ дан 4 December 2019 в 10:03
поделиться

Функция хорошо сформирована (синтаксически корректна), но как только функция возвращается, возвращаемая ссылка становится недействительной и не может быть использована.

Для пояснения: рассматриваемый код не вызывает никакого неопределенного поведения. Вы можете спокойно вызывать эту функцию, пока не используете возвращаемое значение, например, вот это:

test_function(); // ok

Однако, если вы попытаетесь использовать возвращаемое значение (например, инициализировать им другую ссылку или скопировать ссылку в другой объект), то вы вызовете неопределенное поведение, потому что время жизни ссылки (объекта x) закончится (x будет уничтожен при возврате функции, потому что это автоматическая переменная):

std::vector<int>& vec = test_function(); // undefined
std::vector<int> vec = test_function();  // undefined
9
ответ дан 4 December 2019 в 10:03
поделиться

Да, это верно, но если вы попытаетесь использовать возвращаемое значение, вы получите неопределенное поведение.

1
ответ дан 4 December 2019 в 10:03
поделиться

Вы не можете вернуть ссылку на локальную переменную по той же причине, по которой вы не можете вернуть указатель на локальную переменную, потому что при возврате из функции эти локальные переменные освобождаются и, следовательно, ссылка или указатель становятся недействительными.

0
ответ дан 4 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: