AUTO и неопределенное поведение | Углубленное программирование на C++: (По книге Скотта Мейерса) #5
ฝัง
- เผยแพร่เมื่อ 19 มิ.ย. 2024
- Предыдущее видео: • Всегда использовать AU...
В этом видео мы детально рассмотрим главу 2.2 книги Скотта Мейерса "Effective Modern C++", которая называется "Если auto выводит нежелательный тип, используйте явно типизированный инициализатор". Мы разберем, как избежать ошибок при использовании auto и как правильно применять явно типизированные инициализаторы для получения ожидаемых результатов.
Воу, чувак, среди гайдов - это лучшее. Я предпочитал всегда смотреть референсы и мануалы, сейчас попался ты и смотрю с кайфом
моё почтение. Впервые смотрю видео про qt с хорошим звуком, монтажом и поставленной речью.
Еще и на русском! Я в восторге. Утомительно слушать индусский-английский и вглядываться в 360р видео. Сейчас персмотрю ВСЕ ролики ахахаа
Пачему так мало просмотров?
Это же шедевр!
Хотя на моменте, когда автор приводит пример с auto и cast применительно к vector, и подгорело знатненько, но, видимо это было сделано для привлечения внимания - такая работа над вниманием аудитории вызывает бескоайнее восхищение)
Коротко, информативно, по существу. 10 минут очень удобно. Информация полезна.
не бросай канал бро из - за иннактива, контент хороший. надоело обезьян смотреть с тривиальным кодом) Еще кста было б очень интересно посмотреть что - нибудь про кьют, фрейм шикарный, но контента по нему практически нет. в общем всех благ и развития
Пишем KDE с нуля, на КуТэ шесть!
Продолжай снимать, очень качественный контент. Я уверен, что тут будет много подписчиков
std::vector считается устаревшим и не рекомендуется к использованию, если что. Вместо него следует использовать std::bitset. Ну или вектор от чего то вроде enum class bool_t : uint8_t {False, True};
Хороший формат, продолжай
Спасибо за качество!
Супер серия чëтко и наглядно. Хорошее дополнение к лекциям Ivan Sorokin. Пара замечаний ниже.
Вектор буллей должен быть забуллен и подвергнут анафеме на собесах и в продакшене. Бьëрн Страуструп хотел как лучше, а получилось как всегда.
А что -Владимир Ильич писал про старость- Скотт Майерс писал про C++17? Ну камон кто-то в 2024 кодит на C++11/14? Большая просьба к автору канала демонстрировать изменения в C++17/20/23.
В чём смысл использования static_cast с auto, если мы всё равно пишем тип, который нам нужен? Я не силён в C++, но насколько я знаю, идея auto заключается в том, чтобы тип определялся на этапе выполнения и чтобы не писать длиннющие названия шаблонных типов с параметрами с такими же длиннющими названиями. Но со static_cast мы всё равно явно кастуем значение к нужному типу. В таком случае, мне кажется, действительно легче обойтись без auto и написать сразу тип переменной, нежели чем городить лишний код.
Все верно, показанные примеры сильно натянутые. Код должен быть читаемым, а static_cast сильно ухудшает читаемость.
И при использовании auto тип определяется на этапе компиляции.
А если где-то в коде есть места, которые "не по канону" и делают какую-то магию - на мой взгляд, лучше в явном виде написать комментарий, чтобы потом не возникало проблем.
салям, я может чо не понимаю, но не проще ли написать bool isSmokeDetected = ... вместо auto isSmokeDetected = static_cast ... ну как бы пля.. человек, который пишет подобный код всенепременно должен перегрузить _ВСЕ _ операторы ,все методы сделать виртуальными и вызвать 3 из них в конструкторе..
Посмотри конец видео
@@cherimolah9493 и чо ?) вот 2 секунды подумать, чувак, чо изменится, если ты вместо auto ep = static_cast напишешь float ep = static_cast.. как auto дополнительно подчеркнет намеренность твоих действий? )
звездец ... Ну и если ты хочешь мессагу программисту донести, оставь коммент, нахера этот оверхэд со статик кастом
Why for make Sensor you doesn't use enum?
Привет! По книге Майерса идёшь?
Привет, да, в описание указана книга и глава, которая разбирается
не увидел здесь никакого неопределенного поведения, только невнимательность программиста.
да и пример дурацкий, так и хочется написать комент для джуна, его запилившего - "отрефакторить немедленно".
о читаемости кода - старый-добрый С-стиль для приведения типов выглядит намного приятнее, чем статик касты (и не надо рассказывать, что тру С++ кодеры должны приводить типы только кастами, это мракобесие).
Интересная информация, но не понятно, почему это называется в видео "неопределенное поведение", если оно определено и зависит только от внимательности программиста. Но подстава некая есть, осадочек остается
«неопределенное поведение», оно же «undefined behavior» - это понятие из стандарта (описано в §1.3.12) - поведение, которое может возникать в результате использования ошибочных программных конструкций или некорректных данных, на которые Международный Стандарт не налагает никаких требований. Неопределенное поведение также может возникать в ситуациях, не описанных в Стандарте явно.
В данном случае пример специально так подобран, чтобы вызвать разыменование висячего указателя на уже уничтоженный временный объект.
Когда isSmokeDetected выводится в cout, он приводится к bool, а в операторе приведения происходит разыменование указателя, указывающего на вектор.
Но сам вектор был уничтожен после инициализации isSmokeDetected, потому что в примере специально так сделано, чтобы вектор был rvalue.
Очевидно, что разыменование указателя на уничтоженный объект -- чистейшее UB.
Тип "буль" звучит несерьёзно.
Джордж Буль (2 ноября 1815 - 8 декабря 1864) - английский математик и логик.
С 1849 года был профессором математики Королевского колледжа Корка (ныне Университетский колледж Корка). Один из основателей математической логики.
@@R0bertAkopyan тонко!
9:10 ничего это не гарантирует. Комментарий "@ник_прогера: тут хватит float" убирает все вопросы. А если чел из прокси класса возьмёт флот вместо дабла - всё равно выглядит как ошибка.
У нас teamlead требует удалять такие комментарии. Код должен быть понятен без комментариев.
@@R0bertAkopyan Код без комменатриев, как книга без оглавления. Адепты самодокументируемого кода седьмого дня)