Re[90]: Когда это наконец станет defined behavior?
От: vdimas Россия  
Дата: 18.08.23 11:58
Оценка:
Здравствуйте, σ, Вы писали:

σ>Похоже, у тебя возникли, раз ты утверждаешь, что объекта якобы два.


Согласно семантике — два.
Согласно способу реализации — соптимизировали в один.


V>>Описаны внутренние подробности реализации трюка.

σ>Что значит внутренние?

Что и без этой подробности семантика твоей программы не изменится.


V>>Было бы понятно — не задавал бы глупых вопросов.

V>>Согласно семантике речь идёт о двух разных объектах и эта семантика гарантируется.
σ>Гарантируется, что при NRVO объект один и тот же.

Оптимизации не являются обязательными.
Более того, несут с собой некоторые ограничения:
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html

В стандарте с С++17 рекомендуется RV-оптимизация только безымянного объекта, т.е. мой пример под это НЕ попадает.

А для моего примера в стандарте сказано — компилтору разрешается убирать лишнее копирование (или перемещающее копирование).


V>>Не согласен — обоснуй.

σ>У тебя возникли проблемы с прочтением?

У тебя возникли проблемы с формулировкой проблемы.


V>>А что эту семантику можно реализовать через ссылку на одну и ту же область памяти в различных точках программы — так в этом и состоит суть RV-оптимизации. ))

σ>Какие ещё ссылки? У переменных result и someDictionary даже тип не ссылочный)))

Мда...
Согласно определению, переменная — это адрес объекта.
Переменная-поле — адрес от "начала" объекта.
Глобальная — адрес в глобальном сегмента данных.
Локальная — адрес в локальном фрейме стека.

В общем, ликбез — доступ к полям объектов или автоматическим переменным на стеке всегда косвенный.
Прямой доступ возможен только к глобальным переменным.


V>>Но эти ссылки никогда не валидны одновременно, во что тебя уже тыкали.

σ>И дальше что? Операции происходят над объектом, а не «ссылками», а объект в обоих случаях один и тот же.

Операции над объектами происходят через ссылание на них — через имя переменной, либо через явные ссылочные типы данных.


σ>>>— Да какой тут способ, дело не хитрое.

V>>Угу, ты пытался рассуждать о неких проблемах.
σ>Это широко известная проблема (в узких кругах)

Но сформулировать не можешь?
Так и запишем.


V>>Сформулировать проблему ты не смог

σ>Это ты не смог понять

Я пока не видел формулирования, т.е. понимать пока нечего.
Я попытался тебе помочь, но ты там не в состоянии ответить:
http://www.rsdn.org/forum/cpp/8582417.1


V>>Давай ты включишь уже моск и попытаешься, таки, сформулировать проблему.

V>>Можно своими словами, бгг..
σ>Стёкла не выдави своим раздутым ЧСВ

Чья бы корова мычала. ))
Ты зачем-то начал хамить в банальном, в общем-то, случае.
Я тоже в детстве психовал, когда не сразу что-то понимал... Но так то в детстве! ))


V>>От одного сотрясения воздуха абревиатурами RVO/NRVO твои тараканы понятнее не становятся.

σ>От одного сотрясения воздуха словами про "контекст" или "внутренние подробности" твой бред ответом на проблему не становится

Второй раз я дал тебе ссылку, где давно можно было бы ответить по-существу, вместо пререканий.
Отредактировано 18.08.2023 11:59 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.