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

O>>> Так погоди. Давай я сначала попробую сказать точнее, почему я связываю кейсы

O>>>
O>>>  type& v = getrvalue();
O>>>  call(getrvalue(), ...);
O>>>


BFE>>По моим представлением эти два выражения ничем не отличаются с точки зрения жизни временных объектов. Оба временных объекта должны дожить, условно говоря, "до точки с запятой".


O>Вот этимологически как оно было.

O>https://stackoverrun.com/ru/q/6489490

O> Таким образом простая ссылка в майкрософт, вела (сейчас они уже по умолчанию отключают такую возможность) себя как константная в стандарте.

O>Причем замечу
O>

The word const was never present in this section. The rule has always been (from as long as I can remember) that a temporary used to initialize a reference has its lifetime extended to match that of the reference, regardless of the type of the reference.

O> И, кстати, говорят о продлении lifetime
Говорят о продлении жизни объекта для ссылки v после выполнения: type& v = getrvalue();.
Это несколько отличается от времени жизни объекта созданного в call(getrvalue(), ...);. После выполнения этого выражения объект созданный в getrvalue() умирает в отличии от объекта на который ссылается v.

  type& v = getrvalue();   // (1)
  call(getrvalue(), ...);  // (2)
  // вот тут у MS обект созданный в (1) продолжает жить, а объект созданный в (2) уже разрушен.

Поэтому, на мой взгляд, говорить о продлении жизни для объекта созданного в call(getrvalue(), ...); смысла нет.

O> Глядя на стандарт и диаграммку

O>expression
O> | \
O>glvalue rvalue
O> | | \
O>lvalue xvalue prvalue
O> Возникают смутные сомнения, что скопипащено оно было с некоей грамматики. Отсюда и это странное смешение — rvalue и выражения. Хотя вот эти ветвления скорее обоснованы структурами синтаксического разбора,

Вот тут я согласен. У меня тоже сложилось впечатление, что вместо описания языка мы имеет описание работы парсера.

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

BFE>>>>Если арг не проинициализируется, то и функция вызвана не будет. Причём тут продление жизни для ссылок?
O>>> так именно. "если проинициализируется и продлит жизнь". А то может ведь и не продлить (получим битую ссылку в теле)
BFE>>Я не могу придумать конструкцию вызова функции без инициализации аргумента.
O>Но я не про инициализацию говорил, я говорил про потенциальную вероятность того, что ссылка окажется битая, т/к каким-то образом не произойдет материализация временного объекта (т/к там просто референс)
Существование ссылки без инициализации запрещено, так что такой ситуации быть не может.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.