AUTO и неопределенное поведение | Углубленное программирование на C++: (По книге Скотта Мейерса) #5
HTML-код
- Опубликовано: 5 окт 2024
- Больше видео: sponsr.ru/pole...
В этом видео мы детально рассмотрим главу 2.2 книги Скотта Мейерса "Effective Modern C++", которая называется "Если auto выводит нежелательный тип, используйте явно типизированный инициализатор". Мы разберем, как избежать ошибок при использовании auto и как правильно применять явно типизированные инициализаторы для получения ожидаемых результатов.
Воу, чувак, среди гайдов - это лучшее. Я предпочитал всегда смотреть референсы и мануалы, сейчас попался ты и смотрю с кайфом
Коротко, информативно, по существу. 10 минут очень удобно. Информация полезна.
моё почтение. Впервые смотрю видео про qt с хорошим звуком, монтажом и поставленной речью.
Еще и на русском! Я в восторге. Утомительно слушать индусский-английский и вглядываться в 360р видео. Сейчас персмотрю ВСЕ ролики ахахаа
Пачему так мало просмотров?
Это же шедевр!
Хотя на моменте, когда автор приводит пример с auto и cast применительно к vector, и подгорело знатненько, но, видимо это было сделано для привлечения внимания - такая работа над вниманием аудитории вызывает бескоайнее восхищение)
не бросай канал бро из - за иннактива, контент хороший. надоело обезьян смотреть с тривиальным кодом) Еще кста было б очень интересно посмотреть что - нибудь про кьют, фрейм шикарный, но контента по нему практически нет. в общем всех благ и развития
Пишем KDE с нуля, на КуТэ шесть!
Продолжай снимать, очень качественный контент. Я уверен, что тут будет много подписчиков
В чём смысл использования static_cast с auto, если мы всё равно пишем тип, который нам нужен? Я не силён в C++, но насколько я знаю, идея auto заключается в том, чтобы тип определялся на этапе выполнения и чтобы не писать длиннющие названия шаблонных типов с параметрами с такими же длиннющими названиями. Но со static_cast мы всё равно явно кастуем значение к нужному типу. В таком случае, мне кажется, действительно легче обойтись без auto и написать сразу тип переменной, нежели чем городить лишний код.
Все верно, показанные примеры сильно натянутые. Код должен быть читаемым, а static_cast сильно ухудшает читаемость.
И при использовании auto тип определяется на этапе компиляции.
А если где-то в коде есть места, которые "не по канону" и делают какую-то магию - на мой взгляд, лучше в явном виде написать комментарий, чтобы потом не возникало проблем.
Спасибо за качество!
Супер серия чëтко и наглядно. Хорошее дополнение к лекциям Ivan Sorokin. Пара замечаний ниже.
Вектор буллей должен быть забуллен и подвергнут анафеме на собесах и в продакшене. Бьëрн Страуструп хотел как лучше, а получилось как всегда.
А что -Владимир Ильич писал про старость- Скотт Майерс писал про C++17? Ну камон кто-то в 2024 кодит на C++11/14? Большая просьба к автору канала демонстрировать изменения в C++17/20/23.
Хороший формат, продолжай
Привет! По книге Майерса идёшь?
Привет, да, в описание указана книга и глава, которая разбирается
салям, я может чо не понимаю, но не проще ли написать bool isSmokeDetected = ... вместо auto isSmokeDetected = static_cast ... ну как бы пля.. человек, который пишет подобный код всенепременно должен перегрузить _ВСЕ _ операторы ,все методы сделать виртуальными и вызвать 3 из них в конструкторе..
Посмотри конец видео
@@cherimolah9493 и чо ?) вот 2 секунды подумать, чувак, чо изменится, если ты вместо auto ep = static_cast напишешь float ep = static_cast.. как auto дополнительно подчеркнет намеренность твоих действий? )
звездец ... Ну и если ты хочешь мессагу программисту донести, оставь коммент, нахера этот оверхэд со статик кастом
std::vector считается устаревшим и не рекомендуется к использованию, если что. Вместо него следует использовать std::bitset. Ну или вектор от чего то вроде enum class bool_t : uint8_t {False, True};
🤦🤦🤦 у тя фантазия разыгралась, все впорядке с vector 🤣В C++26 приссутствует и предпопсылок к deprecated НЕ ВИДНО!! 👍
удачи std bitset ресайзить 👋
@@SalatikInMyHead Оно не deprecated официально. Просто нежелательно к использованию из-за побочных эффектов. И обычно, массив битов используется для хранения флагов, и не нуждается в масштабировании.
Вообще, если так посудить - то и с исключениями всё в порядке. Однако, в современном c++ их использование считается моветоном. Потому что они слишком дорогие в плане ресурсов. И в STL были добавлены альтернативы уже имеющимся утилитам, которые позволяют обходиться без исключений.
@@Alexander_Gurov_RF програма без побочных эфектов НЕВОЗМОЖНА, о каких эффектах речь идет? 😂😂👎С исключениями все впорядке как испольвались так и используются(в stl тоже), откуда ты инфу берешь хз 🤦
@@SalatikInMyHead Условно с ними всё в порядке. Однако, они считаются ресурсоёмкими, и с ними хуже читабельность (код более громоздкий). Именно по этой причине и появились в STL аналоги уже существующих утилит, которые не выбрасывает исключений, а вместо этого возвращают код ошибки. Например, конвертеры. Сам подход с их использованием считается нежелательным по современным нормам. Хотя они и существуют для совместимости. Старая добрая оптимизация возвращается. Техпроцессы достигли своего пика, производительность ядер больше не растёт, развитие идёт в сторону параллелизма. Плюс растёт популярность встраиваемых устройств и микроконтроллеров. И вот в связи с этим в языке множество нововведений.
@@Alexander_Gurov_RF програма нетолько ошибки хендлит, как ты ресурсоемкость получил🤯🤯🤔Юзай фичи поназначению и все будет ОК 👍👍без замеделений
К какой теме тут исключения НЕЯСНО, у тя мания какаято 😂😂😂
Интересная информация, но не понятно, почему это называется в видео "неопределенное поведение", если оно определено и зависит только от внимательности программиста. Но подстава некая есть, осадочек остается
«неопределенное поведение», оно же «undefined behavior» - это понятие из стандарта (описано в §1.3.12) - поведение, которое может возникать в результате использования ошибочных программных конструкций или некорректных данных, на которые Международный Стандарт не налагает никаких требований. Неопределенное поведение также может возникать в ситуациях, не описанных в Стандарте явно.
В данном случае пример специально так подобран, чтобы вызвать разыменование висячего указателя на уже уничтоженный временный объект.
Когда isSmokeDetected выводится в cout, он приводится к bool, а в операторе приведения происходит разыменование указателя, указывающего на вектор.
Но сам вектор был уничтожен после инициализации isSmokeDetected, потому что в примере специально так сделано, чтобы вектор был rvalue.
Очевидно, что разыменование указателя на уничтоженный объект -- чистейшее UB.
не увидел здесь никакого неопределенного поведения, только невнимательность программиста.
да и пример дурацкий, так и хочется написать комент для джуна, его запилившего - "отрефакторить немедленно".
о читаемости кода - старый-добрый С-стиль для приведения типов выглядит намного приятнее, чем статик касты (и не надо рассказывать, что тру С++ кодеры должны приводить типы только кастами, это мракобесие).
По поводу приведений типов я бы с вами поспорила, а вот по поводу auto - это определённо слово-паразит. Хотели как лучше (использовать слабо актуальное слово из C), а получилась довольно глупая синтаксическая семантика, которая не улучшает читаемость и не улучшает безопасность, а делает ровно обратное. Может быть для лямбд актуально, но это редкое применение. Если просто в рутинном коде кто-то пишет auto, нужен срочно огнемёт.
@@MariaEsenina часто (всегда, если точнее) использую авто, в основном - для ссылок на глубоко закопанные поля и хранения промежуточных результатов вычислений. Очень улучшает читаемость кода.
Тип "буль" звучит несерьёзно.
Джордж Буль (2 ноября 1815 - 8 декабря 1864) - английский математик и логик.
С 1849 года был профессором математики Королевского колледжа Корка (ныне Университетский колледж Корка). Один из основателей математической логики.
@@R0bertAkopyan тонко!
9:10 ничего это не гарантирует. Комментарий "@ник_прогера: тут хватит float" убирает все вопросы. А если чел из прокси класса возьмёт флот вместо дабла - всё равно выглядит как ошибка.
У нас teamlead требует удалять такие комментарии. Код должен быть понятен без комментариев.
@@R0bertAkopyan Код без комменатриев, как книга без оглавления. Адепты самодокументируемого кода седьмого дня)
Why for make Sensor you doesn't use enum?