Короче, вижу фигурные скобки -- это семантика списка инициализации. Такая семантика будет +/- общей для разных классов. Если фигурные скобки с одним значением -- просто список инициализации с одним значением. Вижу круглые скобки -- это семантика параметров конструктора. Смысл параметров будет разный для разных классов. Надо смотреть, что там заложил автор класса. Поэтому vector vec{10} // вектор длины 1 со значением 10 vector vec(10) // вектор длины 10 с мусором в качестве значений vector vec{10, 0} // вектор длины 2 со значениями 10 и 0 vector vec(10, 0) // вектор длины 10 со значениями 0
Интересный совет по проектированию интерфейсов: делать так, чтобы инициализация в круглых скобках не отличалась от инициализации в фигурных скобка. Тогда вопрос, зачем нужны разные виды скобок.
5:15 Ничего там не заменится, там сначала вычислится 5.8, а уже потом, при последующей попытке сужения этого значения, и произойдёт ошибка. 15:02 А второй элемент равен не 2-м.
Ты крут, чел! И с фоном и с микрофоном наладил прям контент. Микрофон реально решает, слушать тебя приятно! И тематика не банальная! Сам осваиваю C++, вот твои все видосы посмотрю. Это первый. Респект. Так вообще по Константину Владимирову учусь, но у тебя, судя по заголовкам видосов, можно подсмотреть отдельные детали под микроскопом!
Владимир Константинов не учит, а флексит на лекциях. Понимают его 1-2 подсоса на первых партах, к которым он то и дело по ходу лекции обращается. И то потому что они явно не рядовые студенты, а аспиранты какие-то, которые ту или иную тему уже знают.
2:10. Почему на этом моменте компилятор не сгенерировал оператор перемещения или конструктор перемещения? Потому что есть явно определенный конструктор копирования или оператор копирования?
Фигурная инициализация - интересная тема, хорошо осветил список инициализации (как мне кажется не стоило ломать язык и двадцать минут назвать его "инищиалайзер лист". В целом, лайк конечно
Синтаксис c++ превратился в цыганский табор, и ощущается он не как язык программирования, а как русский язык, где в каждом правиле есть свои особенности и, чтобы действительно разобраться во всех тонкостях, надо положить жизнь на это. Мне кажется для этого языка уже нет хорошего применения в новых проектах, которые не зависят от старого кода.
А что ты хотел? Любая технология или наука со временем разрастается, потому что развивается и для ее изучения приходится тратить много времени. Многие вещи внедрены в целях безопасности/оптимизации и т.д. К тому же тебя никто не обязывает использовать новейшие нововведения стандартов.
1:40 Не будет вызван конструктор копирования, эта строка буквально идентична предыдущей. Будет точно так же вызыван только конструктор, соответствующий параметрам в списке инициализации.
@@z140140Примеры принципиально различаются. В первом случае, аналогично как если бы переменная инициализировалась возвращаемым из функции значением, произойдет элизия копирования. Эта оптимизация существует 25 лет и включена по умолчанию даже на О0 во всех компиляторах.
В рукомендациях залетел твой канал, очень круто делаешь! Подумай о том, чтобы сделать видео о rvalue ссылках. Ни одно видео мне не дало 100 процентного понимаю что да как
"19 различных способов инициализировать int" - это вам не это. Есть классная статья на Хабре "Инициализация в современном C++", от которой теоретики в ужасе, как на ЭТОМ можно кодить. Зато практики такими вопросами не задаются, т.к. любят/вынуждены ходить по граблям и веруют в то, что кодируют без ошибок и UB. Иногда их в этом пытаются разубедить статические анализаторы, санитайзеры, паники, крэшы и хакеры. Особенно весело, когда в новом релизе стандарта опять что-то улучшили.
Страхотно видео. Абонирах се за канала, и изгледах всичките ти видеа. Много са полезни и информативни. Бихте ли обяснили промените в С++ 20 и 23? Как могат да се използват модулите въведени със С++/20? Каква е ситуацията с общодостъпни модули включващи стандартната езикова библиотека? Извинете за отвратителната граматика (предполагам е отвратителна), но използвам гугъл преводач, понеже руския ми е много слаб.
"Скотт Майерс называет это примером плохого дизайна интерфейса..." Не хочу хейтить, но раз язык позволяет, значит это зачем-то нужно. Но в принципе мне ролик понравился. Уже лет 25 не программировал на C++ по серьёзному, а хочется вернуться. Достаточно легко слушать видео и визуализация лёгкая для понимания. Кстати, а что за редактор кода?
1:32 - и зачем это, интересно, при работе с пользовательским классом нужно знать когда конструктор копирования, а когда оператор присваивания? у нормальных классов это одно и то же, порой реализовано одно через другое. если пользовательский класс написан о4ком и там оно разное - то это плохой класс, не используйте его или перепишите, с ним будет только больше проблем. и не нужно, наяривать на свои скобки, компилятор все сделает за вас. разницу имеет смысл смотреть только в конечном собранном коде. все остальные рассуждения - ниач0м. в стандарте может быть написано что угодно, а компилятор сделает совершенно другое и оптимизированное. один компилятор сделает одно, другой - другое.
Учить 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.
Складывается ощущение, что эти нововведения делаются так: - всех нормальных людей всё устраивает - какой-то задрот теоретик, далёкий от энтерпрайза: "а вот МНЕ нехватает какой-то херни, которая нахрен никому не нужна" - разрабы плюсов : "СРОЧНО ВЫПУСКАЕМ ОБНОВЛЕНИЕ" - задрот доволен, нормальные люди страдают
Ну как, теперь ты знаешь, что и в С++ подналожили синтаксического сахара, и есть масса возможностей сбить с толку новичков совершенно тривиальными вещами, записанными через задницу. 😊
После подобных видио появляется желание сделать свой собственный яп, такой-же быстрый и низкоуровневый как С/С++, но намного проще, чисто из-за того что будет вырезано большенство бесполезного/заменяемого функционала. Думаю лет через 20 - 30 сделаю. А то я только новичок не сильно шарю. Вдруг всë что я считаю бесполезным на самом деле необходимо.
@@diez4005 в нëм на самом деле тоже много лишнего если бы мог то и его переделал но тогда возможно и сам процессор придëтся переделовать мне на подобное жизни не хватит
@@tgitw-tq6iu естественно я не знаю что такое ЦПП, и ни кто мне про него раньше не говорил. Загуглил вот: ЦПП - Центр Поддержки Пользователей:) Но если ты имел ввиду Центральный Процессор, то я лишь поверхностно представляю его архитектуру, и мне в этом ещё предстоит разобраться.
Такой канал по плюсам - это то, чего не хватало этому миру
Ага, а то у Константина Владимирова, слишком сложные нюансы для профи, а у других азы. Середина.
С++ прекрасно решает проблемы, которые сам же и создаёт :D
Хороший язык. Люблю инструменты, в которые можно закопаться, когда нефиг ими делать.
все по книжке) идеально для закрепления
спасибо!!
Спасибо, Дмитрий, только с вашими роликами разобрался с умными указателями. Вы очень хорошо объясняете.
Короче, вижу фигурные скобки -- это семантика списка инициализации. Такая семантика будет +/- общей для разных классов. Если фигурные скобки с одним значением -- просто список инициализации с одним значением.
Вижу круглые скобки -- это семантика параметров конструктора. Смысл параметров будет разный для разных классов. Надо смотреть, что там заложил автор класса.
Поэтому
vector vec{10} // вектор длины 1 со значением 10
vector vec(10) // вектор длины 10 с мусором в качестве значений
vector vec{10, 0} // вектор длины 2 со значениями 10 и 0
vector vec(10, 0) // вектор длины 10 со значениями 0
Интересный совет по проектированию интерфейсов: делать так, чтобы инициализация в круглых скобках не отличалась от инициализации в фигурных скобка. Тогда вопрос, зачем нужны разные виды скобок.
А как же обратная совместимость ?
Для того чтобы ТЫ страдал!
@@robbieazreal3192 🤣 Не, ну не так чтоб совсем страдал, но нервно оглядываться на очередной стандарт придётся )
> делать так, чтобы инициализация в круглых скобках не отличалась
Нет. См. например std::vector.
5:15 Ничего там не заменится, там сначала вычислится 5.8, а уже потом, при последующей попытке сужения этого значения, и произойдёт ошибка.
15:02 А второй элемент равен не 2-м.
А вот вас я бы с удовольствием взял на работу над реально серьезными задачами.
Молодец!
Ты крут, чел! И с фоном и с микрофоном наладил прям контент. Микрофон реально решает, слушать тебя приятно! И тематика не банальная! Сам осваиваю C++, вот твои все видосы посмотрю. Это первый. Респект.
Так вообще по Константину Владимирову учусь, но у тебя, судя по заголовкам видосов, можно подсмотреть отдельные детали под микроскопом!
Владимир Константинов не учит, а флексит на лекциях. Понимают его 1-2 подсоса на первых партах, к которым он то и дело по ходу лекции обращается. И то потому что они явно не рядовые студенты, а аспиранты какие-то, которые ту или иную тему уже знают.
2:10. Почему на этом моменте компилятор не сгенерировал оператор перемещения или конструктор перемещения? Потому что есть явно определенный конструктор копирования или оператор копирования?
На сколько мне move семантика применяется когда объект является rvalue значением то есть временным объектом
Топ видео, до этого не знал для чего именно это нужно, спасибо)
Наверное, надёжней использовать конструкцию вида
auto value = ValueType(Args...)
Круто, помогли, наконец, разобраться что и как работает, спасибо!!
Ух ты, мне понравилось!
Молодец, четко изложил вопрос!
Лайк, пиписка. 🎉
Я мимокрокодил, потому что синтаксиса такого не видел (не пишу на плюсах), но ролик на 18 минут про отличие двух строчек кода... Вау
@@tgitw-tq6iu невозможно объяснить за 3 минуты?
Дайте мне переопределение операций в джаву!!!
Фигурная инициализация - интересная тема, хорошо осветил список инициализации (как мне кажется не стоило ломать язык и двадцать минут назвать его "инищиалайзер лист". В целом, лайк конечно
супер контент 😉
реально годно
Синтаксис c++ превратился в цыганский табор, и ощущается он не как язык программирования, а как русский язык, где в каждом правиле есть свои особенности и, чтобы действительно разобраться во всех тонкостях, надо положить жизнь на это. Мне кажется для этого языка уже нет хорошего применения в новых проектах, которые не зависят от старого кода.
По твоему есть что-то лучше С++, rust, python или может C ?
Я конечно понимаю что каждый язык программирования лучше в определенной сфере, но в данном случае что лучше чем С++??
@@book1738 для низкого уровня - си, чтобы на нём для конкретной платформы написать LISP-машину для прикладного программирования
А что ты хотел? Любая технология или наука со временем разрастается, потому что развивается и для ее изучения приходится тратить много времени. Многие вещи внедрены в целях безопасности/оптимизации и т.д.
К тому же тебя никто не обязывает использовать новейшие нововведения стандартов.
😅@@book1738
1:40
Не будет вызван конструктор копирования, эта строка буквально идентична предыдущей. Будет точно так же вызыван только конструктор, соответствующий параметрам в списке инициализации.
для int(int) это и будет конструктор копирования. а дальше он приводит пример с кастомным классом, и это подводка к этому примеру
@@z140140 примеры принципиально различаются.
@@z140140Примеры принципиально различаются. В первом случае, аналогично как если бы переменная инициализировалась возвращаемым из функции значением, произойдет элизия копирования. Эта оптимизация существует 25 лет и включена по умолчанию даже на О0 во всех компиляторах.
Почти всё я знал, кроме конфликтов с std::initializer_list. Меня удивило то, что в ютубе такие темы освещаются
Мне кажется он похож на чела Simple Code , но более продвинутой версии
8:10 Не знал. Крутяк!
Неожиданно, про С++ мне рассказывает Кевин ДеБрюйне ))
блин. точно )))
С приведением типов всегда была проблема в языке. Поэтому у нас есть explicit
Где автор был раньше?!??!? Спасибо большое за видео!
Интересно, на сколько инициализация в Rust лучше только что рассказанного шаманства в современном C++?
ни на сколько.
@@MakarenkoSasha Что-то я там такого шаманства не прироминаю. А вы?
@@prayer4675 просто для меня это не шаманство.. видимо 25 лет с++ оставляют отпечаток.
Просто раст такого делать не умеет, вот вы и не припоминаете
@@AlexAlex-jk2tn Ну а зачем шаманить, когда нужно просто проинициализировать?
Std initializer list и все эти неявные касты типов ломают статическую типизацию
В рукомендациях залетел твой канал, очень круто делаешь! Подумай о том, чтобы сделать видео о rvalue ссылках. Ни одно видео мне не дало 100 процентного понимаю что да как
Круто, поддержу комментарием
Какой это редактор кода?
QtCreator
Создатели C++ забыли для чего нужен любой язык программирования - для решения прикладных/бизнес задач, вместо этого они решают проблемы самого C++
У вас такой отличный голос. Не пробовали быть диктором?
"19 различных способов инициализировать int" - это вам не это. Есть классная статья на Хабре "Инициализация в современном C++", от которой теоретики в ужасе, как на ЭТОМ можно кодить. Зато практики такими вопросами не задаются, т.к. любят/вынуждены ходить по граблям и веруют в то, что кодируют без ошибок и UB. Иногда их в этом пытаются разубедить статические анализаторы, санитайзеры, паники, крэшы и хакеры. Особенно весело, когда в новом релизе стандарта опять что-то улучшили.
Страхотно видео.
Абонирах се за канала, и изгледах всичките ти видеа. Много са полезни и информативни. Бихте ли обяснили промените в С++ 20 и 23? Как могат да се използват модулите въведени със С++/20? Каква е ситуацията с общодостъпни модули включващи стандартната езикова библиотека?
Извинете за отвратителната граматика (предполагам е отвратителна), но използвам гугъл преводач, понеже руския ми е много слаб.
"Скотт Майерс называет это примером плохого дизайна интерфейса..." Не хочу хейтить, но раз язык позволяет, значит это зачем-то нужно. Но в принципе мне ролик понравился. Уже лет 25 не программировал на C++ по серьёзному, а хочется вернуться. Достаточно легко слушать видео и визуализация лёгкая для понимания.
Кстати, а что за редактор кода?
Редактор - Qt Creator
1:32 - и зачем это, интересно, при работе с пользовательским классом нужно знать когда конструктор копирования, а когда оператор присваивания? у нормальных классов это одно и то же, порой реализовано одно через другое. если пользовательский класс написан о4ком и там оно разное - то это плохой класс, не используйте его или перепишите, с ним будет только больше проблем.
и не нужно, наяривать на свои скобки, компилятор все сделает за вас. разницу имеет смысл смотреть только в конечном собранном коде. все остальные рассуждения - ниач0м. в стандарте может быть написано что угодно, а компилятор сделает совершенно другое и оптимизированное. один компилятор сделает одно, другой - другое.
👍🏻
Досмотрел до конца, пропало желание учить 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 прошлое сообщение адресовано тебе. Не справшивай почему всё так 🤣🤦♂🤦♂🤦♂
Складывается ощущение, что эти нововведения делаются так:
- всех нормальных людей всё устраивает
- какой-то задрот теоретик, далёкий от энтерпрайза: "а вот МНЕ нехватает какой-то херни, которая нахрен никому не нужна"
- разрабы плюсов : "СРОЧНО ВЫПУСКАЕМ ОБНОВЛЕНИЕ"
- задрот доволен, нормальные люди страдают
конструкторы это ошибка language disign, как и исключения. хорошо, что есть языки, где это пофиксили
8:30 вы не последовательны))) : data(initList) {} => : data{initList} {}
Какие-то странные сущности, и их назначение не очевидно. Теперь понятно, почему многие ругают плюсы.
fifine am8
Топ контент
Когда интересно но не понятно
Вот это топ видос! Я стал умнее! Наверное. Спасибо!
Высококачественная подача материала и хорошая речь.
Я .net разработчик, зачем я это смотрю 😂
Ну как, теперь ты знаешь, что и в С++ подналожили синтаксического сахара, и есть масса возможностей сбить с толку новичков совершенно тривиальными вещами, записанными через задницу. 😊
А нада быть .da разработчиком
А потом они рассказывают, что в js не интуитивное преобразование типов и сравнение == 😂🤣🤣
Мда уж. Неявное преобразование в сях это жесть
После подобных видио появляется желание сделать свой собственный яп, такой-же быстрый и низкоуровневый как С/С++, но намного проще, чисто из-за того что будет вырезано большенство бесполезного/заменяемого функционала. Думаю лет через 20 - 30 сделаю. А то я только новичок не сильно шарю. Вдруг всë что я считаю бесполезным на самом деле необходимо.
Есть же ASM он реально выглядит попроще )
@@diez4005 в нëм на самом деле тоже много лишнего если бы мог то и его переделал но тогда возможно и сам процессор придëтся переделовать мне на подобное жизни не хватит
@@Hobby2007 а не мог бы ты заодно переделать ткань вселенной и заодно человеческую природу так, чтобы не было ни пороков, ни зла, ни смерти?
@@Kalin_cheetah звучит тяжело
@@tgitw-tq6iu естественно я не знаю что такое ЦПП, и ни кто мне про него раньше не говорил. Загуглил вот: ЦПП - Центр Поддержки Пользователей:) Но если ты имел ввиду Центральный Процессор, то я лишь поверхностно представляю его архитектуру, и мне в этом ещё предстоит разобраться.
Я в шоке что у программистов на С++ такие же вопросы как и у нас бедных плебеев с других языков
я не знаю, может только у меня такая проблема, но микрофон очень бьёт в уши
2024 year. New concept... Lol...