Форум
C/C++
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, vdimas, Вы писали: V>Здравствуйте, σ, Вы писали: V>>>>>Согласно семантике - два. σ>>>>Да нет, согласно семантике — один. V>>>Два. σ>>Симптоматично, что ни одного пруфа от тебя до сих пор не было. V>Чем исходник не пруф? V>>>В этом суть оптимизации. V>>>Точно такая же происходит здесь: V>>>[ccode] σ>>const SomeObj obj = SomeObj(args); σ>>[/ccode] V>>>Согласно семантике, создаётся временный безымянный объект и копируется (либо перемещается) в целевую переменную obj. σ>>Или не создаётся и не копируется V>А ты проверял? V>[ccode] V>class SomeObj { V>public: V> SomeObj(int) {} V> //SomeObj(const SomeObj &) = delete; V>}; V>//const SomeObj obj = SomeObj(42); V>const SomeObj obj2(42); V>[/ccode] V>Поиграй с раскомментированием строчек в различных сочетаниях. σ>>тоже «согласно семантике», а не «способу реализации» V>Семантика описана простейшим исходником, который я ХЗ как можно было не суметь прочитать. V>Если же ты опять пытаешься озвучить свою "эрудицию", то ты ошибся стадией рассуждения об исходнике - оптимизация выполняется над изначальной неоптимизированной моделью кода, и в этой модели кода должен быть доступен конструктор копирования, которого после оптимизации не будет. Но он всё-равно нужен. V>Ну и, в дебаге обычно полное повторение описанного в коде безо-всякий оптимизаций. :xz: V>>>Лишнего копирования/перемещения можно избежать. V>>>При возврате по значению применяется ровно та же логика. σ>>Только при возврате по значению может быть несколько переменных с разной константностью V>И какая разница, если оперируем данными по значению? V>Семантически в этом случае создаются копии объектов. V>А упоминание об обязательности RVO - это ж для дурачка-программиста, а не для компилятора, потому что с С++17 RVO будет использовано в любом случае, [i]даже если конструкторы/деструкторы имеют побочные эффекты[/i]. V>Выделенное - это для тебя, программиста, чтобы ты потом не задавал вопросов "а почему так?". V>(Впрочем, в это уже тыкал, пошли по кругу) σ>>И тогда возникают некоторые вопросы. V>Странные у тебя какие-то вопросы, которые ты не в состоянии даже просто сформулировать на 20-й итерации. :facepalm: σ>>Но даже если бы было и только — какая разница? V>Никакой, бо оптимизация не изменяет семантику. V>А даже если случилось RVO, то мы имеем дело с одной областью памяти, но с разными ссылками на неё в разные моменты работы программы, но никогда одновременно. V>(Опять по кругу в тебя этим тыкают) V>ХЗ, кароч... V>Если сложно с пониманием передачи данных по значению, попробуй порассуждать про передачу через ссылочную семантику: V>[ccode] V>SomeObj * const obj = new SomeObj(42); V>[/ccode] V>Тут оператор new создаёт в куче неконстантный объект и возвращает неконстантный указатель на этот объект, где значение неконстантного указателя копируется в константный указатель obj. V>Надеюсь, хотя бы с примитивными типами данных сложности понимания не возникают - каким образом мы копируем числовое значение неконстантного указателя в константный? )) V>А если обернуть числовое значение в некий класс SomeObj, ы? V>Неужели понимать становится сложнее? ))
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …