Магистерский курс C++ (МФТИ, 2022-2023). Лекция 1. Строки.

preview_player
Показать описание
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.

На этой лекции мы поговорим о строках. Начнём с базовых концепций языка и систематически изобретем его основные средства абстракции.

Лектор: Константин Владимиров.
Дата лекции: 7 сентября 2022 года.
Съёмка и звук: Юлий Тарасов.

Предыдущая лекция: нет, это первая лекция курса.

Timeline:
00:00 Литералы
07:35 Lvalue to rvalue
16:20 C строки
24:15 Проблемы C строк
28:05 Класс строки
36:30 Поиск и замены
40:49 Проблемы C++ строк
48:28 String View
53:46 Оптимизации COW и SSO
01:06:22 Шаблон класса строки
01:15:55 Список литературы

Errata:
* тут пока пусто
Рекомендации по теме
Комментарии
Автор

Большое спасибо за то, что даёте возможность абсолютно каждому человеку учиться по нереально крутым и качественным материалам от Вас!

ИльяТаланкин-хф
Автор

ну это же просто шедевр! спасибо огромное за такой качественный материал!!!

evgeniykochetkov
Автор

Как жаль, что когда я учил С++ 20 лет назад, не было таких лекций и курсов.

DDUH_PG
Автор

Спасибо. Очень крутые лекции. Буду смотреть ещё. Качество сильно лучше, чем ранее

jupel
Автор

человеческое спасибо вам, милый человек !!!!

РинатШакиров-шр
Автор

Очень понравилось видео, на ютубе мало лекций подобного уровня на русском языке, продолжайте, пожалуйста!

oriraven
Автор

Замечательные лекции. Пожалуйста продолжайте

sashamalkovich
Автор

Большое спасибо! Очень интересная лекция

ivanlosev
Автор

Спасибо за Ваш труд! Жаль, что можно поставить только один лайк.

ВладиславИванушкин-дб
Автор

Интересный курс. Задорное начало.
Велосипеды строк мне напомнили про Stroka и Wtroka от Yandex. Собственно, все крупные компании грешат велосипедами, когда всё своё.
Я понимаю, что поздновато комментировать, но format библиотека -- это не инициатива Microsoft, а внесённая в стандарт fmtlib Виктора Зверовича (P0645R10). Сейчас он, кажется, работает в Meta. Формат строковую интерполяции там взят, скорее, из Python форматирования. Такой вариант удобен, когда надо, например, повторно использовать аргументы. `{0} {1} {0}`.
В таком духе. Плюс, конечно большой от неё в том, что часть работы происходит во время компиляции. Не очень понятно, зачем автор решил её внести в стандарт, потому что эта библиотека сильно развивается на данном этапе. Её всегда можно использовать header-only или прилинковать статически, подтянув CMake-ом, например, или conan\vcpkg.

AnatolyKalin
Автор

очень интересные, живые лекции.
желаю успеха проекту!

weromliric
Автор

Спасибо! Шикарная лекция и изложение. Впервые осознал сложность реализации строк. Разрабатывая на JS о подобном не задумываешься… 😅

maksimemelianchenko
Автор

Отличная, лекция смотрю вас достаточно давно... Хотелось бы от вас увидеть вне лекций, проектирование программ на языке С++ :)

censor
Автор

Ничего не понятно, но очень интересно. Посмотрю что-нибудь попроще и ещё раз посмотрю это.

ИванКулеш-хи
Автор

Кажется легче было показать
auto* x = &"hello world";
auto* y = &5;
Казалось бы везде литералы, но почему то первое валидно .а второе нет, заставляет сразу внезапно осознать в чем разница между стринговым литералом и обычным, ну типа... Поинтер на нечто не выделенное в куче, но почему то это валидный код и он не провис
Без стандарта пожалуй отвечу на вопрос про nullptr
Для создания значения поинтера не нужно чтение значения nullptr, это работает по принципу тег-диспатчинга. Более того, чтобы создать копию значения nullptr тоже не нужно чтение значения из копии, так что кланг прав.
Более того, сама по себе возможность существования volatile int сомнительна, т.к. смысл имеют ссылки и указатели на volatile, а локальная переменная такого типа явно не может быть изменена никак кроме как с помощью УБ

niklkelbon
Автор

1:11:26 Если совсем к слайдам придираться, после параметра Traits забыта запятая, аналогично в презентации для бакалавров (16-containers, 26 слайд, и еще там забыты ; после объявления классов, как и на 24 слайде)

ddvamp
Автор

Спасибо за лекцию. Про std::format вынужден не согласиться. Есть fmtlib - чудовищно популярная библиотека, которая легла в основу std::format. И все, кто хочет std::format(например, я) пока пользуются ей.
Ну и синтаксис у неё великолепен, в отличии от натыкивания модификаторов и обрубков строк в стрим в fmt::format задаётся единая форматная строка, из которой наглядно видно, как будет выглядеть результат, проверяет типизацию в компайл-тайме и выводит результат прилично быстрее stringstream'а.
В общем почему не добавляют std::format в стандартные библиотеки не знаю, но пока есть fmtlib - это не очень большая проблема.

IvanQRT
Автор

а на счет использования std::stringstream вместо std::format -- при каждом вызове оператора << вроде же используется вызов std::locale, который занимает достаточно много времени процессора (дергает вызовы ОС). std::format как раз и призван решить данную проблему (std::locale будет вызван всего один раз).

safocl
Автор

спасибо за ваши труды, спасибо за потрясающее качество курса! хотел бы спросить
есть ли упражнения, сопровождающие этот курс?

olegpatraschku
Автор

Отличная лекция.
Про список литературы:
Жаль что доклад про строку Фейсбука такой старый
У вас, Константин, ещё где-то была ссылка на видео, где докладчик пытался создать конструктор из двух строк.

ivandomnikov