Re[8]: Правомерно ли такое
От: B0FEE664  
Дата: 18.08.20 12:32
Оценка:
Здравствуйте, ollv, Вы писали:

O>>>>>+ к тому есть продление жизни для ссылок — тоже опасное поведение, с такими трюками можно легко запутаться особенно присутствуют сложные вычисления типов

BFE>>>>Здесь нет продления жизни для ссылок.
O>>>есть но завуалированное. ссылка принимает rvalue и объект живет, в то время как rvalue уже умирает по стандарту после вызова конструктора. Потому оно и не компилируется в джисях
BFE>>rvalue — это выражение, оно не может жить или умереть.
O> Не знаю о чем ты )) к rvalue вполне применим термин lifetime.
Что обозначает lifetime для rvalue?

O>Что касается выражения, синтаксически все, что попадает в конечном счете в АСТ — expression. такова селяви синтаксического анализа.

И какое отношение это имеет ко времени жизни?

O>Объект — это уже физика языка, так вот живет объект как rvalue, выражением в данном случае будет именно std::vector<int>() -> arg, вот здесь оно и умрет, после инициализации параметра.

Выражение умрёт? Или умрёт объект?

BFE>>А вот временные объекты обязаны дожить (по стандарту) до конца выполнения выражения,

O> Только вот конец выражения будет ровно после запятой (или скобки), std::vector<int>() -> arg.
Конец full-expression'а?

O> И если арг не проинициализируется от рвелью и не продлит жизнь объекту, он умрет.

Если арг не проинициализируется, то и функция вызвана не будет. Причём тут продление жизни для ссылок?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.