|
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
|
||||||
Применение std::move к локальной переменной при возврате из функции06.07.2017, 14:53. Показов 3824. Ответов 19
Метки нет (Все метки)
0
|
||||||
| 06.07.2017, 14:53 | |
|
Ответы с готовыми решениями:
19
Непонятные символы при возврате строки из функции
std::move() |
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 06.07.2017, 23:47 | |
|
Нет, не имеет. Rvalue-ссылка всё равно приводится обратно к возвращаемому типу, а ненужное копирование и переносы компилятор сокращает за счёт RVO (в данном случае NRVO).
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 07.07.2017, 12:41 | ||
|
такой явный мув обламывает последнему RVO/NRVO, соответственного, вместо перфоманса получаем тормоза.
2
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 08.07.2017, 13:07 | ||
|
0
|
||
|
Неэпический
|
|||||||
| 08.07.2017, 13:52 | |||||||
Как видите, имеем лишнее перемещение при использовании std::move, тогда как без него срабатывает оптимизация и нет накладных расходов вовсе.
0
|
|||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 08.07.2017, 14:34 | ||
|
а) RVO действительно не выполняется из-за того, что move (или даже явный каст в &&) предписывают выполнить перемещение; б) побочные эффекты такого перемещения (в данном случае, печать) обязаны выполняться; в) накладных расходов непосредственно на копирование или перемещение компилятор всё равно может избежать, (а может и не избежать, если имеет дело с хитрым объектом со сложным конструктором). Итого: использование std::move в приведённом примере не нужно, и в некоторых случаях оно может немного понизить производительность, но скорее всего никак на неё не повлияет.
0
|
||
|
Неэпический
|
||
| 08.07.2017, 14:39 | ||
|
В случае, если компилятор не сможет сделать rvo/nrvo, он сам выполнит перемещение, если будет такая возможность. Копирование объектов std::unique_ptr
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 08.07.2017, 15:03 | ||
|
вам выше привели пример, который иллюстрирует поломку RVO/NRVO
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 08.07.2017, 15:10 | ||
|
0
|
||
|
Неэпический
|
|||||||
| 08.07.2017, 15:15 | |||||||
0
|
|||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||||||||
| 08.07.2017, 15:33 | ||||||||||||
|
А если брать прямые эффекты, а не побочные, то...
0
|
||||||||||||
|
Неэпический
|
||||||||||||
| 08.07.2017, 15:54 | ||||||||||||
|
В ряде случаев код внутри функции без std::move оптимизируется лучше даже с POD-типами. Другой пример:
0
|
||||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||
| 08.07.2017, 16:53 | |||
|
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 08.07.2017, 22:49 | ||||
|
с восприятием реальности как? вам выше код привели. как RVO/NRVO идут лесом. и конструктор становится наблюдаем. мув ломает RVO/NRVO оптимизацию. - а можно просто переменную типа int замувить... - можно машку за ляжку, козу на возу, не ковыряй в носу! у вас там похоже ассм головного мозга.
1
|
||||
|
Заблокирован
|
||
| 08.07.2017, 23:02 | ||
|
- If a function returns a class type by value, and the return statement's expression is the name of a non-volatile object with automatic storage duration, which isn't the function parameter, or a catch clause parameter, and which has the same type (ignoring top-level cv-qualification) as the return type of the function, then copy/move (since C++11) is omitted. When that local object is constructed, it is constructed directly in the storage where the function's return value would otherwise be moved or copied to. This variant of copy elision is known as NRVO, "named return value optimization" Как минимум это обламывается. return statement's expression перестаёт быть object with automatic storage duration (with the same type as the function return type) и начинает возвращать какую-то ссылку.
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||||||||||||||||||
| 09.07.2017, 11:07 | |||||||||||||||||||
|
Код
Не лучше ль на себя, дружок, оборотиться? Сбавить наглое хамство, повысить внимание к деталям, меньше возводить в абсолют своё кривое понимание стандартов и почаще сверяться с реальностью?
0
|
|||||||||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||
| 09.07.2017, 11:39 | ||||||||||||||
|
стандарт разрешает компиляторам забить на все возможные сайд-эффекты конструкторов в угоду оптимизациям. в этом и заключается смысл copy elysion как бе. пример: http://rextester.com/NIA30417
внезапно? своим явным мувом вы ломаете эту оптимизацию. и что бы это понять, ассемблер не нужен. молиться на стандарт - так же. нужно знать и понимать правила языка. и этого - достаточно. к чему приводят конструкции на языке с++, ну значит вы просто балбес.
которые иллюстрируют наличие/отсутствие побочек конструкторов, не являются для вас "реальными фактами", значит вы ещё и не адекватный к тому же. людей, которые противоречат объективной реальности называют маразматиками. и кстати, по поводу хамства: вы либо возомнили себя пупом земли, либо просто применяете само понятие не по назначению. хамить может только нижестоящее лицо вышестоящему: сын - отцу. ученик - учителю. подчиненный - начальству. младший - старшему. все прочие могут только грубить. и я вам не грубил.
0
|
||||||||||||||
|
Заблокирован
|
||
| 09.07.2017, 19:00 | ||
|
Ни о каких ссылках речи не идёт.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 09.07.2017, 22:05 | ||||
|
хотя и искажает. вероятно она писалась некомпетентным человеком, который притянул за уши понятие, в отрыве от его исторического происхождения. если вам действительно интересно, то рекомендую вам смотреть в сторону истории происхождения этого понятия, и толковые словарики аля Ожегова. в частности, даже по вашей же ссылке есть пункт касательно России:
на практике, 99% всех кейсов - банальная грубость, воспринимаемая "интылэгэнтным" оппонентом: "он мне нахамииииил!" по моим собственным наблюдениям, человеки называют грубость хамством не потому, что грубиян пытается поставить себя выше по статусу, а потому что обиженка пытается состроить из себя вшивого интеллигентика. что касается дворян, то они ничего не пытались из себя состроить, относясь к нижестоящему сословию, как к нижестоящему. для них было совершенно естественно относится к холопам, как к более низшей прослойке общества. так же, в этой некорректной статье упущен очень важный момент: хамами дворяне называли не всех холопов подряд, а лишь тех, которые позволяли себе в том, или ином виде пренебрежение кастовым строем. для дворянина хам - это холоп, который, бросил на дворянина косой взгляд, например. а в том, что касается реального кейса "демонстрация более высокого статуса", то для этого случая существует своё отдельное понятие, называемое "снобизмом". можете глянуть на викки. тоже корявенько, но более менее: https://ru.wikipedia.org/wiki/... 0%BE%D0%B1
0
|
||||
| 09.07.2017, 22:05 | |
|
Помогаю со студенческими работами здесь
20
Затираются значения при возврате из функции initializer_list Особенности использования указателей и ссылок в C++ при возврате из функции
Почему не вызывается конструктор копирования при возврате объекта из функции Как избежать копирования вектора, при возврате его из функции? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|