Полевой Дмитрий
Полевой Дмитрий
  • 13
  • 67 198
Все про std::forward | передача по значению - это ОК | Семантика перемещения
Boosty: boosty.to/polevoydmitry
TG: t.me/polevoydmitry
В этом видео мы наконец поговорим про функцию std::forward и идеальную передачу (perfect forwarding). Узнаем зачем нужна эта функция, какие проблемы она решает, реализуем функции std::move и std::forward, опишем проблему семантики перемещения и один из способов ее решения, где обнаружим, что передавать параметр по значению можно, и даже иногда нужно.
Так что - приятного просмотра!
00:00 - Начало
00:24 - Какую проблему решает std::forward
06:48 - Где используется std::forward
08:46 - Реализация std::move
14:50 - Реализация std::forward
22:23 - Проблема перегрузок для поддержки move-семантики
24:40 - Почему универсальная ссылка не всегда решит все проблемы
26:50 - Пять секунд релакса
26:57 - Передача по значению - иногда лучшее решение
29:31 - Заключение
มุมมอง: 1 225

วีดีโอ

Виды value, r-value ссылки, универсальные ссылки. Move-семантика с++
มุมมอง 1.9K21 วันที่ผ่านมา
Boosty: boosty.to/polevoydmitry TG: t.me/polevoydmitry Мы продолжаем разбирать тему семантики перемещения. И для дальнейшего изучения этой темы, нам важно разобраться с категориями value, и как их отличать, какие свойства есть у l-value ссылок и r-value ссылок, а также узнать про универсальные ссылки (forwarding references) и сворачивание ссылок. Все это мы разберем в этом видео. Так что - прия...
Основы семантики перемещения в с++
มุมมอง 7Kหลายเดือนก่อน
Boosty: boosty.to/polevoydmitry TG: t.me/polevoydmitry С этого видео мы начнем изучать большую и очень важную тему в языке с - семантику перемещения, понимание который поднимет вас на новый уровень в программировании. В этом видео мы узнаем причины появления семантики перемещения и разберем ее основы. Так что - приятного просмотра! 00:00 - Начало 00:28 - Когда и зачем добавили семантику перемещ...
Все про STD::SHARED_PTR за 20 минут | Углубленное программирование на C++
มุมมอง 2.4Kหลายเดือนก่อน
Boosty: boosty.to/polevoydmitry TG: t.me/polevoydmitry Ролик про std::unique_ptr: th-cam.com/video/E3PV_shkZeU/w-d-xo.html В этом видео мы поговорим про самый часто используемый умный указатель std::shared_ptr, разберем все его возможности, тонкости, плюсы и минусы, и как им правильно пользоваться. Приятного просмотра!
std::unique_ptr и идиома RAII | Углубленное программирование на C++: (По книге Скотта Мейерса) #9
มุมมอง 4.8K5 หลายเดือนก่อน
В этом видео мы детально рассмотрим главу 4.1 и частично главу 4.4 книги Скотта Мейерса "Effective Modern C ". С этого видео мы начинаем серию роликов про умные указатели (smart pointers) и начнем с идеологически самого первого и самого простого умного указателя std::unique_ptr. Мы рассмотрим что такое идиома RAII, как пользоваться std::unique_ptr и его основные возможности, которые нужно знать...
std::atomic и потокобезопасность | Углубленное программирование на C++: (По книге Скотта Мейерса) #8
มุมมอง 5K5 หลายเดือนก่อน
Больше видео: sponsr.ru/polevoycppguide В этом видео мы детально рассмотрим главу 3.10 книги Скотта Мейерса "Effective Modern C ", которая называется "Делайте константные функции-члены безопасными в смысле потоков". Мы разберемся что такое "гонка данных", как эта проблема решается, рассмотрим, что такое std::atomic, как им пользоваться, где им пользоваться не надо, и как делать функции безопасн...
typedef VS using В чем разница? | Углубленное программирование на C++: (По книге Скотта Мейерса) #7
มุมมอง 9K6 หลายเดือนก่อน
Больше видео: sponsr.ru/polevoycppguide В этом видео мы детально рассмотрим главу 3.3 книги Скотта Мейерса "Effective Modern C ", которая называется "Предпочитайте объявление псевдонимов применению typedef". Мы разберемся чем различаются ключевые слова typedef и using и где они используются.
Фигурная инициализация в С++ | Углубленное программирование на C++: (По книге Скотта Мейерса) #6
มุมมอง 18K6 หลายเดือนก่อน
Больше видео: sponsr.ru/polevoycppguide В этом видео мы детально рассмотрим главу 3.1 книги Скотта Мейерса "Effective Modern C ", которая называется "Различие между { } и () при создании объектов". Мы разберем что такое унифицированная (или же фигурная) инициализация, где она может использоваться и какие подводные камни содержит
AUTO и неопределенное поведение | Углубленное программирование на C++: (По книге Скотта Мейерса) #5
มุมมอง 4.5K6 หลายเดือนก่อน
Больше видео: sponsr.ru/polevoycppguide В этом видео мы детально рассмотрим главу 2.2 книги Скотта Мейерса "Effective Modern C ", которая называется "Если auto выводит нежелательный тип, используйте явно типизированный инициализатор". Мы разберем, как избежать ошибок при использовании auto и как правильно применять явно типизированные инициализаторы для получения ожидаемых результатов.
Всегда использовать AUTO? | Углубленное программирование на C++:(По книге Скотта Мейерса) #4
มุมมอง 3.5K6 หลายเดือนก่อน
Предыдущее видео: th-cam.com/video/MWKwqBLcxH0/w-d-xo.html В этом видео мы продолжаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы начнем изучение второй главы, посвященной объявлению auto, и разберем первую подглаву "Предпочитайте auto явному объявлению типа".
Как пользоваться DECLTYPE? | Углубленное программирование на C++:(По книге Скотта Мейерса) #3
มุมมอง 4.3K6 หลายเดือนก่อน
Предыдущее видео: th-cam.com/video/pQUX2w1j_iY/w-d-xo.html В этом видео мы разберем третью и четвертую подглавы книги Скотта Мейерса "Современный и эффективный C ", где познакомимся с интересным ключевым словом - DECLTYPE и DECLTYPE(AUTO). Рассмотрим как с ним работать, где он используется, какие подводные камни и сюрпризы он нам приготовил и как посмотреть выведенный им тип
Вывод типа auto | Углубленное программирование на C++ (По книге Скотта Мейерса) #2
มุมมอง 1.7K7 หลายเดือนก่อน
Предыдущее видео: th-cam.com/video/ZBlxquB9nEo/w-d-xo.html В этом видео мы начинаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы рассмотрим вторую подглаву, посвященную выводу типа auto.
Вывод типа шаблона | Углубленное программирование на C++ (По книге Скотта Мейерса)
มุมมอง 4.1K7 หลายเดือนก่อน
В этом видео мы начинаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы рассмотрим первую подглаву, посвященную выводу типа шаблона. Что вас ждет в этом видео: - Погружение в основные концепции вывода типа шаблона - Практические примеры кода для лучшего понимания материала - Советы и рекомендации от Скотта Мейерса

ความคิดเห็น

  • @DART2WADER
    @DART2WADER 15 ชั่วโมงที่ผ่านมา

    Лайк за креатор, а то эмаксвимовские консольные сектанты надоели.

  • @cavesalamander6308
    @cavesalamander6308 16 ชั่วโมงที่ผ่านมา

    9:17 Ха, наконец-то мой коммент хоть кому-то хоть на что-то пригодился! 🙂 "Посмотрите, как всё это выглядит. Это же просто отвратительно." Когда я в начале 200-х узнал, что началась какая-то движуха со стандартом, я был рад. Но в тот момент, когда я впервые увидел объявление лямбда-функции, меня стошнило, и ... до сего времени я использую C++98 (к счастью для моих задач его вполне достаточно). Спасибо, ребята, но --- нет. Я, конечно, человек тренированный даже на FORTH, но видеть код в стиле форта в С++ --- нет, мои ушатанные нервы такого не выдерживают.

  • @Ma_X64
    @Ma_X64 วันที่ผ่านมา

    И в очередной раз разработчики C++ блестяще решили проблему, которую сами же и создали.)))

  • @artefek7300
    @artefek7300 วันที่ผ่านมา

    Видео было очень полезным, спасибо!

  • @portusdelphini
    @portusdelphini วันที่ผ่านมา

    Все это хорошо, но ничего не понятно, как это происходит на уровне ассемблера, на уровне регистров, стека

    • @artembystrov1113
      @artembystrov1113 วันที่ผ่านมา

      Здесь вообще все на поверхности. У тебя указатель на область памяти при std::move просто переносится а при копировании новый выделяется. Если говорить про стек тоже самое будет те же указатели и доп информация структур проплоцирлванных

    • @NXN-QUXT
      @NXN-QUXT วันที่ผ่านมา

      Как компилятор захочет, так на ассемблере и будет реализовано

  • @toxic_champ
    @toxic_champ วันที่ผ่านมา

    после этого видоса я задаюсь вопросом, а так ли я хочу изучать плюсы...

    • @kenol8779
      @kenol8779 18 ชั่วโมงที่ผ่านมา

      По факту здесь ничего сложного нет, просто есть небольшая путаница с lvalue и rvalue)) Даже если не углубляться в это в начале обучения, со временем все равно поймешь.

  • @bigrussianbossshow9420
    @bigrussianbossshow9420 วันที่ผ่านมา

    27:56 c rvalue будет 0 копирований и 1 перемещение, разве нет?

    • @PolevoysProgramming
      @PolevoysProgramming วันที่ผ่านมา

      Если мы сразу передаем r-value, то, конечно же, будет просто одно перемещение, я тут имел ввиду, если мы будет передавать l-value через move: std::string str = "some long string"; .... add(std::move(str));

  • @ИнякинАлександр
    @ИнякинАлександр วันที่ผ่านมา

    Сплошные костыли вместо вывода типов здорового человека.

    • @Ma_X64
      @Ma_X64 วันที่ผ่านมา

      🤝

  • @Mercury13kiev
    @Mercury13kiev วันที่ผ่านมา

    Ответ на последнее - нужно было в первых редакциях Си11. Потом прикрыли.

  • @Selfrock_Vladimir
    @Selfrock_Vladimir วันที่ผ่านมา

    передал по ссылке...

  • @Desotterro
    @Desotterro วันที่ผ่านมา

    Астрологи объявили год годноты, количество крутого контента увеличолсь.

  • @PolevoysProgramming
    @PolevoysProgramming วันที่ผ่านมา

    00:09 - *идельную передачу (Perfect forwarding)

  • @JohnJTraston
    @JohnJTraston 2 วันที่ผ่านมา

    Что запомнить? Не нужно выё... выделываться и поши по Сишному, без вот этой вот всей modern c++снуй ереси.

  • @JohnJTraston
    @JohnJTraston 2 วันที่ผ่านมา

    Mutex не туда воткнул.

  • @eugenenuribekov1231
    @eugenenuribekov1231 3 วันที่ผ่านมา

    Фигурные скобки это старая добрая агрегатная инициализация из С. Просто ее применение несколько расширили.

  • @m_stifeev
    @m_stifeev 7 วันที่ผ่านมา

    Хотел бы предложить тему для новых роликов: в чем разница между c-style, static и dynamic кастами в c++.

  • @donlinoleum831
    @donlinoleum831 10 วันที่ผ่านมา

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

  • @ГеннадийПолетаев-у4м
    @ГеннадийПолетаев-у4м 10 วันที่ผ่านมา

    хотелось бы примеров побольше на реальных кейсах, особенно с мув семантикой

  • @kopatch2377
    @kopatch2377 12 วันที่ผ่านมา

    Понятно объясняешь. Спасибо

  • @АлексейШапоренко-к6т
    @АлексейШапоренко-к6т 14 วันที่ผ่านมา

    Бро, твои видосы лучшие! подача топ, все понятно с первого раза

    • @donlinoleum831
      @donlinoleum831 10 วันที่ผ่านมา

      Подача действительно топ, душевная и очень полезная)

  • @putnik7945
    @putnik7945 14 วันที่ผ่านมา

    Классный видос! Все четко, по делу и очень понятно) Наконец то разобрался с универсальными ссылками😊

  • @m_stifeev
    @m_stifeev 14 วันที่ผ่านมา

    Дмитрий, а разбор самого загадочного типа умных указателей weak_ptr будет?

  • @portusdelphini
    @portusdelphini 15 วันที่ผ่านมา

    Плюсы круты. После 14 он стал комфортным

  • @евгенийшамин-й2б
    @евгенийшамин-й2б 15 วันที่ผ่านมา

    Большая просьба в следующем видео поподробнее рассказать для чего нужен в std::forward remove_reference. И за счёт чего там происходит подавление вывода типа. Большое спасибо за все видео.

  • @cavesalamander6308
    @cavesalamander6308 15 วันที่ผ่านมา

    Новый раздел алгебры - "Исчисление амперсандов". 🙂

  • @Ma_X64
    @Ma_X64 16 วันที่ผ่านมา

    Вот поэтому плюсы -- плохой язык. Нагорожена куча костылей только потому, что какие-то "гуру" утверждают, что указатели -- плохо. Внятных определений у костылей нет, извольте методом исключения ну или чувствовать. П.С. Периодически пишу на плюсах по мере надобности.

    • @donlinoleum831
      @donlinoleum831 10 วันที่ผ่านมา

      а какой тогда хороший язык?))

    • @Ma_X64
      @Ma_X64 9 วันที่ผ่านมา

      @@donlinoleum831 от задач зависит. Проблема плюсов в том, что изначально он ближе к чистому Си, но в него натащили всякой высокоуровневой фигни, чтобы сделать его типа современным. Си хороший язык, потому что занимает свою нишу и не пыжится стать одновременно ирлангом, хаскелем, питоном и чёрт знает ещё чем. Тот же питончик можно назвать хорошим языком, потому что его сложность скрыта для новичка и может никогда не понадобиться, если не возникнет задач. В плюсах же все кишки наружу, так, что приходится для простейших задач осваивать тонны документации. Чего только стоит вся эта бадяга со ссылками или с тем, когда какой конструктор вызывается. Тот же Паскаль с объектами, если игнорировать неудобный синтаксис, гораздо продуманее плюсов, ну да, без множественного наследования и без перегрузки операторов (вроде бы).

    • @donlinoleum831
      @donlinoleum831 7 วันที่ผ่านมา

      @@Ma_X64 Ну это очень спорный вопрос и вряд ли на него есть единственно верный ответ. То что питон хороший язык для новичка это понятно, но "хорошесть" языка все же определяется не тем каков он для новичка, а тем как и какие задачи он решает. Си хороший язык, но остался в своей нише. А вот C++ пошел дальше и решает уже много каких задач. Что C++, что Rust точно юзерфрендли не назовешь, а вот заменить их во многих сферах нельзя. Да и не нужно. На мой взгляд это говорит о том, что программирование является все-таки не очень простым занятием. И нужно ли делать его простым, делая менее глубоким и производительным, ну хз. Хз. Мне кажется, что все-таки не надо).

    • @eugenenuribekov1231
      @eugenenuribekov1231 6 วันที่ผ่านมา

      @@donlinoleum831 Можно поподробнее о "много каких задач"? Потому что в системном программировании плюсы не взлетели, в энтерпрайзе их вытеснили джава и шарп, в некритичных к скорости задачах тот же питон.

    • @donlinoleum831
      @donlinoleum831 6 วันที่ผ่านมา

      @@eugenenuribekov1231 программы для обработки изображений, программы для работы с 3D графикой, рендеринг, практически весь графонистый (и не только) геймдев, браузеры. Музыкальные программы, vst плагины для них. Ну это то, что пришло на ум из такого, бытового уровня)

  • @ИванКрасноярский-е3я
    @ИванКрасноярский-е3я 20 วันที่ผ่านมา

    Помоему в delete так же как и free уже есть встроенная проверка на null

  • @olesoleg
    @olesoleg 20 วันที่ผ่านมา

    Капюшон снимай а то жбан закипит и пар с ушей пойдет😅

    • @donlinoleum831
      @donlinoleum831 10 วันที่ผ่านมา

      думаю, автор сам разберется как ему лучше))

  • @victorkrasnov5576
    @victorkrasnov5576 21 วันที่ผ่านมา

    Классная компиляция сразу нескольких умных книжек, просто сжатая систематизированная квинтессенция знаний. Лайк, подписка, жду следующего видео. Большое спасибо.

  • @setdetser1808
    @setdetser1808 21 วันที่ผ่านมา

    Может пора уже на rutube заливать?

    • @donlinoleum831
      @donlinoleum831 10 วันที่ผ่านมา

      не надо тут такие страшные вещи писать.

  • @EwwwGeN
    @EwwwGeN 21 วันที่ผ่านมา

    я картавый и на протяжении всего видео боролся с мозгом, который воспринимал rvalue, lvalue, rref, lref как набор rlrlrlrlrrl

  • @lagmaker
    @lagmaker 21 วันที่ผ่านมา

    легендарен, очень хорошо рассказал

  • @ГригорийПерельман-я5п
    @ГригорийПерельман-я5п 21 วันที่ผ่านมา

    давай следующее про std::forward

  • @radikru96
    @radikru96 21 วันที่ผ่านมา

    Был убеждён что не придётся читать книги по плюсам.. Не владея этими темами приходится передавать по значению сжигая память.

  • @Vol_
    @Vol_ 21 วันที่ผ่านมา

    😵‍💫

  • @СтуловГеоргий2-42
    @СтуловГеоргий2-42 21 วันที่ผ่านมา

    Что ж, раньше я думал, что знаю с++. Теперь я понимаю, что знаю си....

    • @Slavasil
      @Slavasil 21 วันที่ผ่านมา

      я тоже 2 года назад понял что не знаю самую "интересную" часть с++

  • @ВикторГиль-ф2ф
    @ВикторГиль-ф2ф 21 วันที่ผ่านมา

    Снова о костылях для языка инвалида ну или про удаление гланд не через горло :)

    • @grigoriyleps2001
      @grigoriyleps2001 20 วันที่ผ่านมา

      Здравствуй. Вы видимо предлагаете другой язык с поддержкой ООП раз пишите такое. Ну предлагайте, давайте посмотрим на этот язык. Главное что бы и с памятью можно было работать и ту же мув семантику поддерживает, и возможность запускать на любом оборудовании без виртуалки.

    • @ВикторГиль-ф2ф
      @ВикторГиль-ф2ф 19 วันที่ผ่านมา

      @@grigoriyleps2001 А вам недостаточно существующих? Возьмите Java или Python. Там хотя бы такие костыли не нужны. Понимаете, сложность программы не определяется языком программирования или количеством строк, а также RAII, exceptions... Это только безграмотные считают, что язык программирования имеет значение :)

  • @DART2WADER
    @DART2WADER 21 วันที่ผ่านมา

    Вангую, следующее будет про перфект форвардинг.

  • @Весёлый-Я
    @Весёлый-Я 21 วันที่ผ่านมา

    Здравствуйте, конечно простите меня за глупый вопрос, но когда я пытался всё руками вбить, по теме с прошлого урока, что бы на практике закрепить знания, у меня визуал студия поругалась вот на эту запись SomeClass(const BigData& obj) { data = new BigData(*obj.data); } мол класс BigData не содержит переменной data. Не могли бы подсказать, как устранить данную проблему? Я тока учу плюсы..

    • @PolevoysProgramming
      @PolevoysProgramming 21 วันที่ผ่านมา

      Добрый день, в прошлом видео был пример с конструктором копирования класса SomeClass, он выглядел следующем образом: SomeClass(const SomeClass& obj) { data = new BigData(*obj.data); } Вы в качестве параметра передаете объект типа BigData вместо SomeClass, поэтому у вас появляется эта ошибка.

    • @Весёлый-Я
      @Весёлый-Я 21 วันที่ผ่านมา

      @@PolevoysProgramming ааа, точно, вот не внимательный балбес, спасибо, всё заработало!

  • @MuxaL
    @MuxaL 22 วันที่ผ่านมา

    Skill issues

  • @donlinoleum831
    @donlinoleum831 22 วันที่ผ่านมา

    Друг, огромное спасибо за видео!

  • @animemchik
    @animemchik 23 วันที่ผ่านมา

    Я в шоке что у программистов на С++ такие же вопросы как и у нас бедных плебеев с других языков

  • @userf155
    @userf155 24 วันที่ผ่านมา

    Вот такого блогера нам не хватало.

  • @MrRylov
    @MrRylov 25 วันที่ผ่านมา

    Спасибо за видео, после него я понял почему rust такой популярный :)

  • @MichaelLenz1
    @MichaelLenz1 27 วันที่ผ่านมา

    Какая же гадость этот ваш цпп

  • @Vol_
    @Vol_ 27 วันที่ผ่านมา

    Обожаю плюсы! Всегда найдётся способ выстрелить себе в ногу. =) Хотелось бы, чтобы автор также упомянул о том, что компилятор может предоставлять конструктор и оператор перемещения по умолчанию при определённых условиях. Надеюсь, в будущих видео будут раскрыты юз-кейсы использования семантики перемещения и различные её нюансы. Например, особенности при использовании с виртуальными классами, когда мы перемещаем объект производного класса через объект базового класса. Если не секрет, какая IDE используется в видео? Спасибо за видео, однозначно лайк!

    • @userf155
      @userf155 24 วันที่ผ่านมา

      QtCreator

  • @ISh-_
    @ISh-_ 28 วันที่ผ่านมา

    @PolevoysProgramming Друг, спасибо за контент! Пожалуйста, пофикси задержку видео относительно аудио. Это можно сделать без реэнкода за секунду с ffmpeg, подвинув видео вперед на ~200мс (хотя бы в будущих видео): ffmpeg -i "./this-video.mp4" -itsoffset 0.2 -i "./this-video.mp4" -map 0:v -map 1:a -c:v copy -c:a copy "./this-video.fixed.mp4"

  • @kirillpetrakov3282
    @kirillpetrakov3282 28 วันที่ผ่านมา

    На самом деле, можно, частино, решить проблему перемещения, обходясь исключительно l-value ссылками, не "убивая" семантику копирования. Как верно заметили, семантика перемещения включает в себя как минимум перегрузку конструктора и оператора присваивания. Т.е. мы можем создать любой другой конструктор, так, чтобы он отличался от конструктора копирования. Например, можно ввести новый класс, который в себе хранит ссылку на источник перемещения, и, примем как соглашение, что данный адаптер нужно использовать, когда необходимо переместить объект: template<typename T> struct Movable { T& movable; }; Тогда можно сделать следующий конструктор class Example { public: Example(Example const&); // copy ctor Example(Movable<Example>&); // move-like ctor }; Далее уже можно развить эту тему для более удобного использования, но, как я уже говорил, это может лишь частично решить проблему, так как будет не доступна возможность создавать временный обект, который передается сразу как аргумент. Т.е. без полноценной поддержки новых типов ссылок нельзя было бы корректно написать что-то вроде: Example e(std::move(Example())); Причина в том, что время жизни такого временного объекта можно продлить только через l-value ссылку на константу, а перемещение требует чтобы ссылка была как раз таки не константная. Возможно кому-то может показаться что в таком случае можно применить снятие константности через const_cast, но это уже прямо таки конкретный костыль, который может привести к UB, и, лично я думаю, что именно эта причина была одна из основных в мотивации добавить именно новый вид ссылок для поддержки семантики перемещения.

  • @Тед-е8ы
    @Тед-е8ы 29 วันที่ผ่านมา

    Я воще не вижу проблемы в том что выделять дважды память я вижу проблему в неразумно больших классах.

  • @Тед-е8ы
    @Тед-е8ы 29 วันที่ผ่านมา

    Если у вас такие большие объекты это либо одноразовая акция для инициализации или у вас что-то не так