Информация об изменениях

Сообщение Re[7]: && member? от 11.09.2021 8:38

Изменено 11.09.2021 8:42 rg45

Re[7]: && member?
Здравствуйте, Marty, Вы писали:

R>>А этот код демонстрирует сценарий, когда продление времени жизни временного объекта не работает. Образование невалидной rvalue ссылки и неопределенное поведение, вызванное ее использованием.


M>Сорян за затупанство, но можно поподробнее, что на каждом шаге происходит?


Подробнее можно почитать здесь: https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary.

А temporary bound to a return value of a function in a return statement is not extended: it is destroyed immediately at the end of the return expression. Such return statement always returns a dangling reference.


То есть, при выходе из функции время жизни временного объекта заканчивается в любом случае. И образуется "висячая" ссылка. И даже использование copy/move elision от этого не спасает.
Re[7]: && member?
Здравствуйте, Marty, Вы писали:

R>>А этот код демонстрирует сценарий, когда продление времени жизни временного объекта не работает. Образование невалидной rvalue ссылки и неопределенное поведение, вызванное ее использованием.


M>Сорян за затупанство, но можно поподробнее, что на каждом шаге происходит?


Подробнее можно почитать здесь: https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary.

А temporary bound to a return value of a function in a return statement is not extended: it is destroyed immediately at the end of the return expression. Such return statement always returns a dangling reference.


То есть, при выходе из функции время жизни временного объекта заканчивается в любом случае. И образуется "висячая" ссылка. И даже использование copy/move elision от этого не спасает.

P.S. В принципе, происходит та же самая фигня, что и при попытке вернуть из функции std::initializer_list. Недавно вот обсуждали: http://rsdn.org/forum/cpp/8076574.1
Автор: vng
Дата: 22.08.21