Каталог RSS-каналов
Статистика

RSS-каналов в каталоге: 3392

Добавлено сегодня: 0

Добавлено вчера: 0

СМИ / Новости

Краткое содержание доклада "Ссылки в C++ и вопросы, связанные с ними" с конференции C++ CoreHard Winter 2017

D3 07.10.2019 в 07:32

D3.ru — 80 лет в интернете

Https://www.youtube.com/watch?v=symDO_LKRzQ

Краткое содержание доклада Юрий Гаврилович — "Ссылки в C++ и вопросы, связанные с ними" с конференции C++ CoreHard Winter 2017.

2:37 — про rvalue и lvalue. Неформальное определение от Маерса:

— если вы можете взять адрес у выражения — то оно является lvalue;

— также lvalue являются lvalue–ссылки;

— rvalue является все остальное.

4:45 — примеры lvalue и rvalue выражений с комментариями. В частности, lvalue является функция, результат работы оператора [] (квадратные скобки). Однако, X() — это rva lue, т.к. от него нельзя взять адрес (&X() вернет ошибку)....

7:26 — lvalue–ссылки ("обычные" ссылки, которые были до С++11) на простых примерах.

8:30 — rvalue–ссылки (появились в C++11, обозначаются двумя амперсандами — &&). Такие ссылки могут привязываться ко временными объектам. Их применяют чтобы: 1) убрать ненужные копирования в С++; 2) решить проблему perfect forwarding (подробно рассмотрена дальше).

9:40 — rvalue ссылки — это отдельный тип, который можно использовать для перегрузки функций.

10:30 — Дальше доклад строится вокруг примера, который тут описывается — класс вектора. Разбираются "проблемы" в коде и пути их решения, в том числе:

* 14:40 — уровни безопасности исключений в С++ (одна из проблем в нашем примере).

* 17:10 — идиома copy and swap (улучшает безопасность искючений и качество кода).

* 19:23 — проблема, которую решает move–семантика. Мы хотим присвоить вектору временный объект (который возможно возвращает другая функция). При этом вызывается конструктор копирования, который выделяет дополнительную память, компирует, а затем — временный объект удаляется. Идея — вместо копирования "позаимствовать" данные временного объекта. В C++ для этого применяется std::move, которая из lvalue–ссылки делает rvalue–ссылки.

24:40 — примеры использования std::move. С С++11 стандартные контейнеры поддерживают move–семантику. Таким образом можно избежать лишних копирований:

MyVector vec(1000);

std::vectorvec1.push_back(std::move(vec));

28:10 — Movable only types. Мы можем запретить копирование объекта (убрать конструктор копирования), но разрешить его перемещение. Например — unique_ptr.

31:00 — Forwarding ссылки — это особый вид ссылок, который появляется в процессе вывода типов и в результате превращается либо в lvalue–ссылку, либо — в rvalue–ссылку. Встречается в auto и в аргументах шаблонов функций (приводятся примеры).

32:55 — За счет чего работают Forwarding ссылки. Правила вывода типов, на примерах.

35:00 — Проблема perfect forwarding описана очень поверхностно. Лучше прочитать тут: https://habr.com/en/post/242639/

Также про rvalue–ссылки можно прочитать тут: https://pro–prof.com/forums/topic/cplusplus_references

Move–семантику тут: https://pro–prof.com/forums/topic/move–constructor–semantic_cplusplus

Чтобы всегда узнавать о подобных "обзорах" — https://vk.com/for_programmer

Написал rrrfer на programming.d3.ru / комментировать

Другие записи ленты

Полет сквозь тень 07.10.2019 в 05:09

Почему я не люблю инвестиции в недвижимость 07.10.2019 в 02:09

О беспристрастной Нобелевской премии 07.10.2019 в 01:35

Хуторяне в смятении 06.10.2019 в 23:58

Умер Евгений Бушмин 06.10.2019 в 23:17

"Занимая обе стороны эскалатора, вы уменьшаете очередь перед ним на 30%" 06.10.2019 в 23:13

Оставленный без присмотра кот спарился с пятью кошками и попал под капельницу 06.10.2019 в 22:10

Билайн принимает эстафету у Сбербанка 06.10.2019 в 21:59

Панки хой! 06.10.2019 в 19:28

Материалы горсуда по иску к Генпрокуратуре (ответ не по существу на моё заявление о преступлении ГРУшников сбивших украинский Ил76) 06.10.2019 в 17:55