AUTO и неопределенное поведение | Углубленное программирование на C++: (По книге Скотта Мейерса) #5

Поделиться
HTML-код
  • Опубликовано: 5 окт 2024
  • Больше видео: sponsr.ru/pole...
    В этом видео мы детально рассмотрим главу 2.2 книги Скотта Мейерса "Effective Modern C++", которая называется "Если auto выводит нежелательный тип, используйте явно типизированный инициализатор". Мы разберем, как избежать ошибок при использовании auto и как правильно применять явно типизированные инициализаторы для получения ожидаемых результатов.

Комментарии • 40

  • @geniusgabe8254
    @geniusgabe8254 3 месяца назад +8

    Воу, чувак, среди гайдов - это лучшее. Я предпочитал всегда смотреть референсы и мануалы, сейчас попался ты и смотрю с кайфом

  • @R0bertAkopyan
    @R0bertAkopyan 3 месяца назад +3

    Коротко, информативно, по существу. 10 минут очень удобно. Информация полезна.

  • @HansVeidenkorb
    @HansVeidenkorb 2 месяца назад +1

    моё почтение. Впервые смотрю видео про qt с хорошим звуком, монтажом и поставленной речью.
    Еще и на русском! Я в восторге. Утомительно слушать индусский-английский и вглядываться в 360р видео. Сейчас персмотрю ВСЕ ролики ахахаа

  • @DiIov
    @DiIov 2 месяца назад

    Пачему так мало просмотров?
    Это же шедевр!
    Хотя на моменте, когда автор приводит пример с auto и cast применительно к vector, и подгорело знатненько, но, видимо это было сделано для привлечения внимания - такая работа над вниманием аудитории вызывает бескоайнее восхищение)

  • @flyinga9210
    @flyinga9210 3 месяца назад +8

    не бросай канал бро из - за иннактива, контент хороший. надоело обезьян смотреть с тривиальным кодом) Еще кста было б очень интересно посмотреть что - нибудь про кьют, фрейм шикарный, но контента по нему практически нет. в общем всех благ и развития

    • @vorotnikovyd
      @vorotnikovyd 3 месяца назад

      Пишем KDE с нуля, на КуТэ шесть!

  • @jonyspencer2795
    @jonyspencer2795 3 месяца назад +2

    Продолжай снимать, очень качественный контент. Я уверен, что тут будет много подписчиков

  • @thats_embarrassing_JS
    @thats_embarrassing_JS 3 месяца назад +3

    В чём смысл использования static_cast с auto, если мы всё равно пишем тип, который нам нужен? Я не силён в C++, но насколько я знаю, идея auto заключается в том, чтобы тип определялся на этапе выполнения и чтобы не писать длиннющие названия шаблонных типов с параметрами с такими же длиннющими названиями. Но со static_cast мы всё равно явно кастуем значение к нужному типу. В таком случае, мне кажется, действительно легче обойтись без auto и написать сразу тип переменной, нежели чем городить лишний код.

    • @8olegator8
      @8olegator8 3 месяца назад +2

      Все верно, показанные примеры сильно натянутые. Код должен быть читаемым, а static_cast сильно ухудшает читаемость.
      И при использовании auto тип определяется на этапе компиляции.
      А если где-то в коде есть места, которые "не по канону" и делают какую-то магию - на мой взгляд, лучше в явном виде написать комментарий, чтобы потом не возникало проблем.

  • @TheBotNope
    @TheBotNope 3 месяца назад

    Спасибо за качество!

  • @kunak1197
    @kunak1197 3 месяца назад

    Супер серия чëтко и наглядно. Хорошее дополнение к лекциям Ivan Sorokin. Пара замечаний ниже.
    Вектор буллей должен быть забуллен и подвергнут анафеме на собесах и в продакшене. Бьëрн Страуструп хотел как лучше, а получилось как всегда.
    А что -Владимир Ильич писал про старость- Скотт Майерс писал про C++17? Ну камон кто-то в 2024 кодит на C++11/14? Большая просьба к автору канала демонстрировать изменения в C++17/20/23.

  • @rightmelancholy1170
    @rightmelancholy1170 3 месяца назад

    Хороший формат, продолжай

  • @makellan7136
    @makellan7136 3 месяца назад +3

    Привет! По книге Майерса идёшь?

    • @PolevoysProgramming
      @PolevoysProgramming  3 месяца назад

      Привет, да, в описание указана книга и глава, которая разбирается

  • @Nop_90h
    @Nop_90h 3 месяца назад +2

    салям, я может чо не понимаю, но не проще ли написать bool isSmokeDetected = ... вместо auto isSmokeDetected = static_cast ... ну как бы пля.. человек, который пишет подобный код всенепременно должен перегрузить _ВСЕ _ операторы ,все методы сделать виртуальными и вызвать 3 из них в конструкторе..

    • @cherimolah9493
      @cherimolah9493 3 месяца назад

      Посмотри конец видео

    • @Nop_90h
      @Nop_90h 3 месяца назад

      @@cherimolah9493 и чо ?) вот 2 секунды подумать, чувак, чо изменится, если ты вместо auto ep = static_cast напишешь float ep = static_cast.. как auto дополнительно подчеркнет намеренность твоих действий? )
      звездец ... Ну и если ты хочешь мессагу программисту донести, оставь коммент, нахера этот оверхэд со статик кастом

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 2 месяца назад +1

    std::vector считается устаревшим и не рекомендуется к использованию, если что. Вместо него следует использовать std::bitset. Ну или вектор от чего то вроде enum class bool_t : uint8_t {False, True};

    • @SalatikInMyHead
      @SalatikInMyHead 19 дней назад +1

      🤦🤦🤦 у тя фантазия разыгралась, все впорядке с vector 🤣В C++26 приссутствует и предпопсылок к deprecated НЕ ВИДНО!! 👍
      удачи std bitset ресайзить 👋

    • @Alexander_Gurov_RF
      @Alexander_Gurov_RF 18 дней назад

      @@SalatikInMyHead Оно не deprecated официально. Просто нежелательно к использованию из-за побочных эффектов. И обычно, массив битов используется для хранения флагов, и не нуждается в масштабировании.
      Вообще, если так посудить - то и с исключениями всё в порядке. Однако, в современном c++ их использование считается моветоном. Потому что они слишком дорогие в плане ресурсов. И в STL были добавлены альтернативы уже имеющимся утилитам, которые позволяют обходиться без исключений.

    • @SalatikInMyHead
      @SalatikInMyHead 18 дней назад +1

      @@Alexander_Gurov_RF програма без побочных эфектов НЕВОЗМОЖНА, о каких эффектах речь идет? 😂😂👎С исключениями все впорядке как испольвались так и используются(в stl тоже), откуда ты инфу берешь хз 🤦

    • @Alexander_Gurov_RF
      @Alexander_Gurov_RF 18 дней назад

      @@SalatikInMyHead Условно с ними всё в порядке. Однако, они считаются ресурсоёмкими, и с ними хуже читабельность (код более громоздкий). Именно по этой причине и появились в STL аналоги уже существующих утилит, которые не выбрасывает исключений, а вместо этого возвращают код ошибки. Например, конвертеры. Сам подход с их использованием считается нежелательным по современным нормам. Хотя они и существуют для совместимости. Старая добрая оптимизация возвращается. Техпроцессы достигли своего пика, производительность ядер больше не растёт, развитие идёт в сторону параллелизма. Плюс растёт популярность встраиваемых устройств и микроконтроллеров. И вот в связи с этим в языке множество нововведений.

    • @SalatikInMyHead
      @SalatikInMyHead 18 дней назад +1

      ​@@Alexander_Gurov_RF програма нетолько ошибки хендлит, как ты ресурсоемкость получил🤯🤯🤔Юзай фичи поназначению и все будет ОК 👍👍без замеделений
      К какой теме тут исключения НЕЯСНО, у тя мания какаято 😂😂😂

  • @igorglushatov1948
    @igorglushatov1948 3 месяца назад +2

    Интересная информация, но не понятно, почему это называется в видео "неопределенное поведение", если оно определено и зависит только от внимательности программиста. Но подстава некая есть, осадочек остается

    • @PolevoysProgramming
      @PolevoysProgramming  3 месяца назад +1

      «неопределенное поведение», оно же «undefined behavior» - это понятие из стандарта (описано в §1.3.12) - поведение, которое может возникать в результате использования ошибочных программных конструкций или некорректных данных, на которые Международный Стандарт не налагает никаких требований. Неопределенное поведение также может возникать в ситуациях, не описанных в Стандарте явно.

    • @billjohnes9380
      @billjohnes9380 3 месяца назад

      В данном случае пример специально так подобран, чтобы вызвать разыменование висячего указателя на уже уничтоженный временный объект.
      Когда isSmokeDetected выводится в cout, он приводится к bool, а в операторе приведения происходит разыменование указателя, указывающего на вектор.
      Но сам вектор был уничтожен после инициализации isSmokeDetected, потому что в примере специально так сделано, чтобы вектор был rvalue.
      Очевидно, что разыменование указателя на уничтоженный объект -- чистейшее UB.

  • @dmitriyv4557
    @dmitriyv4557 3 месяца назад +2

    не увидел здесь никакого неопределенного поведения, только невнимательность программиста.
    да и пример дурацкий, так и хочется написать комент для джуна, его запилившего - "отрефакторить немедленно".
    о читаемости кода - старый-добрый С-стиль для приведения типов выглядит намного приятнее, чем статик касты (и не надо рассказывать, что тру С++ кодеры должны приводить типы только кастами, это мракобесие).

    • @MariaEsenina
      @MariaEsenina 2 месяца назад

      По поводу приведений типов я бы с вами поспорила, а вот по поводу auto - это определённо слово-паразит. Хотели как лучше (использовать слабо актуальное слово из C), а получилась довольно глупая синтаксическая семантика, которая не улучшает читаемость и не улучшает безопасность, а делает ровно обратное. Может быть для лямбд актуально, но это редкое применение. Если просто в рутинном коде кто-то пишет auto, нужен срочно огнемёт.

    • @dmitriyv4557
      @dmitriyv4557 Месяц назад

      @@MariaEsenina часто (всегда, если точнее) использую авто, в основном - для ссылок на глубоко закопанные поля и хранения промежуточных результатов вычислений. Очень улучшает читаемость кода.

  • @billjohnes9380
    @billjohnes9380 3 месяца назад

    Тип "буль" звучит несерьёзно.

    • @R0bertAkopyan
      @R0bertAkopyan 3 месяца назад +1

      Джордж Буль (2 ноября 1815 - 8 декабря 1864) - английский математик и логик.
      С 1849 года был профессором математики Королевского колледжа Корка (ныне Университетский колледж Корка). Один из основателей математической логики.

    • @vorotnikovyd
      @vorotnikovyd 3 месяца назад

      @@R0bertAkopyan тонко!

  • @dominuspiritus
    @dominuspiritus 3 месяца назад +2

    9:10 ничего это не гарантирует. Комментарий "@ник_прогера: тут хватит float" убирает все вопросы. А если чел из прокси класса возьмёт флот вместо дабла - всё равно выглядит как ошибка.

    • @R0bertAkopyan
      @R0bertAkopyan 3 месяца назад +1

      У нас teamlead требует удалять такие комментарии. Код должен быть понятен без комментариев.

    • @8olegator8
      @8olegator8 3 месяца назад

      @@R0bertAkopyan Код без комменатриев, как книга без оглавления. Адепты самодокументируемого кода седьмого дня)

  • @Jaroshevskii
    @Jaroshevskii 3 месяца назад +1

    Why for make Sensor you doesn't use enum?