![Полевой Дмитрий](/img/default-banner.jpg)
- 6
- 7 885
Полевой Дмитрий
Russia
Приєднався 21 гру 2014
Доступные и практичные уроки по программированию. Моя цель - сделать программирование понятным и интересным для каждого.
Фигурная инициализация в С++ | Углубленное программирование на C++: (По книге Скотта Мейерса) #6
Предыдущее видео: ua-cam.com/video/dpWV3Xl2Hs0/v-deo.html
В этом видео мы детально рассмотрим главу 3.1 книги Скотта Мейерса "Effective Modern C++", которая называется "Различие между { } и () при создании объектов". Мы разберем что такое унифицированная (или же фигурная) инициализация, где она может использоваться и какие подводные камни содержит
В этом видео мы детально рассмотрим главу 3.1 книги Скотта Мейерса "Effective Modern C++", которая называется "Различие между { } и () при создании объектов". Мы разберем что такое унифицированная (или же фигурная) инициализация, где она может использоваться и какие подводные камни содержит
Переглядів: 3 648
Відео
AUTO и неопределенное поведение | Углубленное программирование на C++: (По книге Скотта Мейерса) #5
Переглядів 1,4 тис.12 днів тому
Предыдущее видео: ua-cam.com/video/4CxplzxxZcA/v-deo.html В этом видео мы детально рассмотрим главу 2.2 книги Скотта Мейерса "Effective Modern C ", которая называется "Если auto выводит нежелательный тип, используйте явно типизированный инициализатор". Мы разберем, как избежать ошибок при использовании auto и как правильно применять явно типизированные инициализаторы для получения ожидаемых рез...
Всегда использовать AUTO? | Углубленное программирование на C++:(По книге Скотта Мейерса) #4
Переглядів 97517 днів тому
Предыдущее видео: ua-cam.com/video/MWKwqBLcxH0/v-deo.html В этом видео мы продолжаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы начнем изучение второй главы, посвященной объявлению auto, и разберем первую подглаву "Предпочитайте auto явному объявлению типа".
Как пользоваться DECLTYPE? | Углубленное программирование на C++:(По книге Скотта Мейерса) #3
Переглядів 1,2 тис.19 днів тому
Предыдущее видео: ua-cam.com/video/pQUX2w1j_iY/v-deo.html В этом видео мы разберем третью и четвертую подглавы книги Скотта Мейерса "Современный и эффективный C ", где познакомимся с интересным ключевым словом - DECLTYPE и DECLTYPE(AUTO). Рассмотрим как с ним работать, где он используется, какие подводные камни и сюрпризы он нам приготовил и как посмотреть выведенный им тип
Вывод типа auto | Углубленное программирование на C++ (По книге Скотта Мейерса) #2
Переглядів 23724 дні тому
Предыдущее видео: ua-cam.com/video/ZBlxquB9nEo/v-deo.html В этом видео мы начинаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы рассмотрим вторую подглаву, посвященную выводу типа auto.
Вывод типа шаблона | Углубленное программирование на C++ (По книге Скотта Мейерса)
Переглядів 71229 днів тому
В этом видео мы начинаем углубленный разбор книги Скотта Мейерса "Современный и эффективный C ". Сегодня мы рассмотрим первую подглаву, посвященную выводу типа шаблона. Что вас ждет в этом видео: - Погружение в основные концепции вывода типа шаблона - Практические примеры кода для лучшего понимания материала - Советы и рекомендации от Скотта Мейерса
auto = [ôdō] ауто = outta. ;)
С++ прекрасно решает проблемы, которые сам же и создаёт :D Хороший язык. Люблю инструменты, в которые можно закопаться, когда нефиг ими делать.
Ух ты, мне понравилось! Молодец, четко изложил вопрос! Лайк, пиписка. 🎉
Спасибо за видео, добавлю только, что константность отбрасывается не при передаче, а при получении, т.е. внутри функции, а не внутри коллера. Ну и это имеет смысл, т.к. для коллера константность переданной переменной гарантируется по дизайну С++. Главное не путать переменную и указатель или ссылку на переменную, в частности указатель и ссылку нельзя передать как параметр, но можно передать значение по указателю или по ссылке, т.е. в таком случае передаётся сама ссылка/указатель и они будут гарантировано константными для коллера, а вот для вызываемой функции они будут модифицируемы (ссылку нелья модифицировать, а вот указатель можно).
Топ видео, до этого не знал для чего именно это нужно, спасибо)
Ну блинский блин! Использовать std::vector<bool> - это же подтасовка чистой воды. Вам наверняка известно, что std::vector<bool> - это хрестоматийный пример того, как НЕ НАДО специализировать шаблоны. Он изначально создавался не потому, что была острая необходимость в нем, а как демонстрация: "Смотрите, как с помощью специализации шаблона можно круто сэкономить пару байтов!". А потом выяснилось, что этот контейнер нарушает кучу контрактов и ожидаемое поведение, которые гарантирует изначальный шаблон. Именно поэтому этот контейнер был признан ошибкой, выпилен из стандартной библиотеки и заменен на std::bitset. И именно нарушение ожидаемого поведения вы наблюдаете с использованием auto, а не какое не UB.
Коротко, информативно, по существу. 10 минут очень удобно. Информация полезна.
салям, я может чо не понимаю, но не проще ли написать bool isSmokeDetected = ... вместо auto isSmokeDetected = static_cast<bool> ... ну как бы пля.. человек, который пишет подобный код всенепременно должен перегрузить _ВСЕ _ операторы ,все методы сделать виртуальными и вызвать 3 из них в конструкторе..
9:10 ничего это не гарантирует. Комментарий "@ник_прогера: тут хватит float" убирает все вопросы. А если чел из прокси класса возьмёт флот вместо дабла - всё равно выглядит как ошибка.
У нас teamlead требует удалять такие комментарии. Код должен быть понятен без комментариев.
До сих пор не понимаю, почему initializer_list до сих пор не встроен в язык по умолчанию. Надо или заголовочный включать, или самому заглушку писать и, что бесит, обязательно в области имён std. То есть компилятор знает о таком классе, но у него "лапки". Шаблоны умеет, а тут нужны дополнительные указания.
какая же мешанина этот c++. как будто собрали множество языков и вылепили ужасного голема
Мне кажется он похож на чела Simple Code , но более продвинутой версии
Тип "буль" звучит несерьёзно.
Джордж Буль (2 ноября 1815 - 8 декабря 1864) - английский математик и логик. С 1849 года был профессором математики Королевского колледжа Корка (ныне Университетский колледж Корка). Один из основателей математической логики.
@@R0bertAkopyan тонко!
0:50 В этом примере нет никакого неопределённого поведения. 5:48 Вот и можно было бы прописать std::vector<int>::size_type, здесь нет проблемы неясности, какой тип писать, проблема -- та же, в длине и муторности записи. То есть, это -- не новая проблема, решаемая с помощью auto, а всё та же самая.
13:00 Для return(x + 5) будет int, а не ссылка на int. 13:21 decltype для любых именованных объектов даст T, а не ссылку на T. Если завести, например, вектор структур, то decltype от обращения по индексу к вектору даст ссылку на структуру. Но если после обращения по индексу к вектору далее обратиться к полю структуры, которое, например, имеет тип int, то decltype от этого выражения даст int, а не ссылку на int.
я с 2000г. не касаюсь с++, но пользовался конечно не на столь глубоком уровне. И как я РАД, что больше не трогаю это ГОВНО! Это надо же взять хороший язык Си и весь его изговнять, превратить его в это монструозное чудовище.
полезнл
Топ контент
Неожиданно, про С++ мне рассказывает Кевин ДеБрюйне ))
блин. точно )))
реально годно
8:30 вы не последовательны))) : data(initList) {} => : data{initList} {}
5:15 Ничего там не заменится, там сначала вычислится 5.8, а уже потом, при последующей попытке сужения этого значения, и произойдёт ошибка. 15:02 А второй элемент равен не 2-м.
А вот вас я бы с удовольствием взял на работу над реально серьезными задачами. Молодец!
Std initializer list и все эти неявные касты типов ломают статическую типизацию
Забавно, есть ещё 1 Полевой Дмитрий, который тоже C++ объясняет (Читает лекции в МИСиС)
Ты крут, чел! И с фоном и с микрофоном наладил прям контент. Микрофон реально решает, слушать тебя приятно! И тематика не банальная! Сам осваиваю C++, вот твои все видосы посмотрю. Это первый. Респект. Так вообще по Константину Владимирову учусь, но у тебя, судя по заголовкам видосов, можно подсмотреть отдельные детали под микроскопом!
1:32 - и зачем это, интересно, при работе с пользовательским классом нужно знать когда конструктор копирования, а когда оператор присваивания? у нормальных классов это одно и то же, порой реализовано одно через другое. если пользовательский класс написан о4ком и там оно разное - то это плохой класс, не используйте его или перепишите, с ним будет только больше проблем. и не нужно, наяривать на свои скобки, компилятор все сделает за вас. разницу имеет смысл смотреть только в конечном собранном коде. все остальные рассуждения - ниач0м. в стандарте может быть написано что угодно, а компилятор сделает совершенно другое и оптимизированное. один компилятор сделает одно, другой - другое.
Интересный совет по проектированию интерфейсов: делать так, чтобы инициализация в круглых скобках не отличалась от инициализации в фигурных скобка. Тогда вопрос, зачем нужны разные виды скобок.
А как же обратная совместимость ?
Для того чтобы ТЫ страдал!
@@robbieazreal3192 🤣 Не, ну не так чтоб совсем страдал, но нервно оглядываться на очередной стандарт придётся )
Я мимокрокодил, потому что синтаксиса такого не видел (не пишу на плюсах), но ролик на 18 минут про отличие двух строчек кода... Вау
@@tgitw-tq6iu невозможно объяснить за 3 минуты?
Круто, поддержу комментарием
Я .net разработчик, зачем я это смотрю 😂
Ну как, теперь ты знаешь, что и в С++ подналожили синтаксического сахара, и есть масса возможностей сбить с толку новичков совершенно тривиальными вещами, записанными через задницу. 😊
После подобных видио появляется желание сделать свой собственный яп, такой-же быстрый и низкоуровневый как С/С++, но намного проще, чисто из-за того что будет вырезано большенство бесполезного/заменяемого функционала. Думаю лет через 20 - 30 сделаю. А то я только новичок не сильно шарю. Вдруг всë что я считаю бесполезным на самом деле необходимо.
Есть же ASM он реально выглядит попроще )
@@diez4005 в нëм на самом деле тоже много лишнего если бы мог то и его переделал но тогда возможно и сам процессор придëтся переделовать мне на подобное жизни не хватит
@@Hobby2007 а не мог бы ты заодно переделать ткань вселенной и заодно человеческую природу так, чтобы не было ни пороков, ни зла, ни смерти?
@@Kalin_cheetah звучит тяжело
@@tgitw-tq6iu естественно я не знаю что такое ЦПП, и ни кто мне про него раньше не говорил. Загуглил вот: ЦПП - Центр Поддержки Пользователей:) Но если ты имел ввиду Центральный Процессор, то я лишь поверхностно представляю его архитектуру, и мне в этом ещё предстоит разобраться.
Интересно, на сколько инициализация в Rust лучше только что рассказанного шаманства в современном C++?
ни на сколько.
@@MakarenkoSasha Что-то я там такого шаманства не прироминаю. А вы?
@@prayer4675 просто для меня это не шаманство.. видимо 25 лет с++ оставляют отпечаток.
Просто раст такого делать не умеет, вот вы и не припоминаете
@@AlexAlex-jk2tn Ну а зачем шаманить, когда нужно просто проинициализировать?
Досмотрел до конца, пропало желание учить C++ 😂
Учить C++ следует только в одном случае. Когда соблюдено одно важное условие. Условие простое: необходимо любить C++. В остальных случаях это будет каторга, и, в результате, ничего не получится.
@@billjohnes9380 ещё если есть необходимость его учить, например, чтобы вносить изменения в какой-нибудь OpenMW, или чтобы разрабатывать, например, игры на UE5, это первое, что в голову пришло, не знаю куда ещё плюс можно применить, когда есть C# и Kotlin, каждый по своему хорошо. Второй крут корутинами, Compose Multiplatform и коротким синтаксисом, а C# поддерживается мировым гигантом, постоянно развивается и ближе к плюсам по возможностям, на мой субъективный взгляд, чем Kotlin.
ijnpsdgnbfds ljhtheagw ajpinwgesns;grtegawfqlejsnfglaegjkfwn egcljkxzgrnzdghjlk`tNAg bdjzghkef3bnrsz egjkrgkfawEszgrbiegjsabizdfjrgsken ещё если есть необходимость его учить, например, чтобы вносить изменения в какой-нибудь OpenMW, или чтобы разрабатывать, например, игры на UE5, это первое, что в голову пришло, не знаю куда ещё плюс можно применить, когда есть C# и Kotlin, каждый по своему хорошо. Второй крут корутинами, Compose Multiplatform и коротким синтаксисом, а C# поддерживается мировым гигантом, постоянно развивается и ближе к плюсам по возможностям, на мой субъективный взгляд, чем Kotlin.
@@billjohnes9380 ______________ ещё если есть необходимость его учить, например, чтобы вносить изменения в какой-нибудь OpenMW, или чтобы разрабатывать, например, игры на UE5, это первое, что в голову пришло, не знаю куда ещё плюс можно применить, когда есть C# и Kotlin, каждый по своему хорошо. Второй крут корутинами, Com_pose Multip_latfo_rm и коротким синтаксисом, а C# поддерживается мировым гигантом, постоянно развивается и ближе к плюсам по возможностям, на мой субъективный взгляд, чем Kotlin.
@@billjohnes9380 прошлое сообщение адресовано тебе. Не справшивай почему всё так 🤣🤦♂🤦♂🤦♂
8:10 Не знал. Крутяк!
Высококачественная подача материала и хорошая речь.
"19 различных способов инициализировать int" - это вам не это. Есть классная статья на Хабре "Инициализация в современном C++", от которой теоретики в ужасе, как на ЭТОМ можно кодить. Зато практики такими вопросами не задаются, т.к. любят/вынуждены ходить по граблям и веруют в то, что кодируют без ошибок и UB. Иногда их в этом пытаются разубедить статические анализаторы, санитайзеры, паники, крэшы и хакеры. Особенно весело, когда в новом релизе стандарта опять что-то улучшили.
Не понятно, зачем вообще использовать auto при инициализации. Мы же когда вводим какое-то значение, то уже знаем какой тип нам нужен, вот его и нужно писать. А auto использовать только для возвращаемых типов, особенно удобно когда работаешь с библиотекой и не знаешь какой там точно тип возвращается. Или я что-то не так понимаю?
Чтобы не заморачиваться с печатанием типа результата вызова функции, особенно если там исполуются нэймспейсы и печатать много
Синтаксис c++ превратился в цыганский табор, и ощущается он не как язык программирования, а как русский язык, где в каждом правиле есть свои особенности и, чтобы действительно разобраться во всех тонкостях, надо положить жизнь на это. Мне кажется для этого языка уже нет хорошего применения в новых проектах, которые не зависят от старого кода.
По твоему есть что-то лучше С++, rust, python или может C ?
Я конечно понимаю что каждый язык программирования лучше в определенной сфере, но в данном случае что лучше чем С++??
@@book1738 для низкого уровня - си, чтобы на нём для конкретной платформы написать LISP-машину для прикладного программирования
А что ты хотел? Любая технология или наука со временем разрастается, потому что развивается и для ее изучения приходится тратить много времени. Многие вещи внедрены в целях безопасности/оптимизации и т.д. К тому же тебя никто не обязывает использовать новейшие нововведения стандартов.
😅@@book1738
1:40 Не будет вызван конструктор копирования, эта строка буквально идентична предыдущей. Будет точно так же вызыван только конструктор, соответствующий параметрам в списке инициализации.
для int(int) это и будет конструктор копирования. а дальше он приводит пример с кастомным классом, и это подводка к этому примеру
@@z140140 примеры принципиально различаются.
@@z140140Примеры принципиально различаются. В первом случае, аналогично как если бы переменная инициализировалась возвращаемым из функции значением, произойдет элизия копирования. Эта оптимизация существует 25 лет и включена по умолчанию даже на О0 во всех компиляторах.
Когда интересно но не понятно
👍🏻
Продолжай снимать, очень качественный контент. Я уверен, что тут будет много подписчиков
Воу, чувак, среди гайдов - это лучшее. Я предпочитал всегда смотреть референсы и мануалы, сейчас попался ты и смотрю с кайфом
Супер серия чëтко и наглядно. Хорошее дополнение к лекциям Ivan Sorokin. Пара замечаний ниже. Вектор буллей должен быть забуллен и подвергнут анафеме на собесах и в продакшене. Бьëрн Страуструп хотел как лучше, а получилось как всегда. А что -Владимир Ильич писал про старость- Скотт Майерс писал про C++17? Ну камон кто-то в 2024 кодит на C++11/14? Большая просьба к автору канала демонстрировать изменения в C++17/20/23.
Интересная информация, но не понятно, почему это называется в видео "неопределенное поведение", если оно определено и зависит только от внимательности программиста. Но подстава некая есть, осадочек остается
«неопределенное поведение», оно же «undefined behavior» - это понятие из стандарта (описано в §1.3.12) - поведение, которое может возникать в результате использования ошибочных программных конструкций или некорректных данных, на которые Международный Стандарт не налагает никаких требований. Неопределенное поведение также может возникать в ситуациях, не описанных в Стандарте явно.
В данном случае пример специально так подобран, чтобы вызвать разыменование висячего указателя на уже уничтоженный временный объект. Когда isSmokeDetected выводится в cout, он приводится к bool, а в операторе приведения происходит разыменование указателя, указывающего на вектор. Но сам вектор был уничтожен после инициализации isSmokeDetected, потому что в примере специально так сделано, чтобы вектор был rvalue. Очевидно, что разыменование указателя на уничтоженный объект -- чистейшее UB.
Хороший формат, продолжай
Привет! По книге Майерса идёшь?
Привет, да, в описание указана книга и глава, которая разбирается
не бросай канал бро из - за иннактива, контент хороший. надоело обезьян смотреть с тривиальным кодом) Еще кста было б очень интересно посмотреть что - нибудь про кьют, фрейм шикарный, но контента по нему практически нет. в общем всех благ и развития
Пишем KDE с нуля, на КуТэ шесть!
Насколько же сильно все испортилось. Я достаточно давно не прикасался к плюсам, но видеть подключения буста только для понимания, какой же тип на самом деле - треш. Впихивание новых конструкций без фактического рефакторинга самого языка делает его абсолютно нечитаемым.
Отличные гайды, спасибо за видео