Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
Собственно, с появлением move-семантики стали доступны вот такие вещи: Код: plaintext 1. 2. 3. 4. 5. 6. Мне, правда, не до конца понятно, когда эти имеет смысл делать, и имеет ли вообще. Кто что по этому поводу думает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 22:11 |
|
||
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
гы :) профилировщик ответит :) главное понять: после std::move нельзя использовать перемещенную переменую. std::move может существенно ускорить работу. если писать классы, указывать констуктор перемещения и присваивание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 22:14 |
|
||
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
BagaBagaСобственно, с появлением move-семантики стали доступны вот такие вещи: Код: plaintext 1. 2. 3. 4. 5. 6. Мне, правда, не до конца понятно, когда эти имеет смысл делать, и имеет ли вообще. Кто что по этому поводу думает? В данном случае move ненужен. Сработает NRVO . Если уж хочешь с move тогда функция должно выглядеть так: Код: plaintext 1. и в общем случае возвращаемый обьект должен поддерживать move ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 22:49 |
|
||
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
BagaBaga, здесь вот хорошо расписано - http://stackoverflow.com/a/14856553/1794089 Гугл-фу решает :) Как я понимаю, std::move нужен для lvalue-переменных, т.е. в твоем случае был бы нужен (если забыть про NRVO, как подметили выше). Написал бы return vector<int>(); - то точно не нужен. На тему когда надо вообще думать о move - это когда перемещать объекты дешевле, чем их копировать. Вектор внутрях - это тупо указатель и int с размером, в общем случае. move поменяет местами два указателя и два int. copy-конструктор же будет долго и мучительно копировать всё содержимое массива. А если в классе 100500 полей простых типов, то еще не факт, что быстрее получится. Как-то так :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2015, 23:00 |
|
||
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
В качестве "итого": RVO "дешевле" std::move. Лучше полагаться на него, если компилятор его поддерживает. std::move "дешевле" копирования. На классах, поддерживающих move-семантику. Использование std::move мешает RVO, т.к std::move - приведение типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 10:17 |
|
||
|
std::move: когда стоит "воровать" локальные переменные
|
|||
|---|---|---|---|
|
#18+
YesSqlЕсли уж хочешь с move тогда функция должно выглядеть так: Код: plaintext 1. и в общем случае возвращаемый обьект должен поддерживать move Синтаксически это правильно. Но выглядит подозрительно, т.к. && - это ссылка, и в моём примере это получится на локальный объект. В общем, не рискну. А вот так - вполне, от чего бы и нет Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2015, 10:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39112704&tid=2018714]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 289ms |
| total: | 445ms |

| 0 / 0 |
