Магистерский курс C++ (МФТИ, 2022-2023). Лекция 9. Волшебство времени компиляции.

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

На этой лекции нас ждёт знакомство с волшебством. Мы начнём с ООП времени компиляции, продолжим вирутальными функциями времени компиляции, продолжим далее выделением памяти времени компиляции и этим ещё не закончим.

Кроме того мы узнаем фокус с пальцем.

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

Timeline:
00:00 Константные выражения
07:25 UB для constexpr
13:45 ООП времени компиляции
21:55 Constexpr evaluation
27:42 Восточная сказка о виртуальных функциях
36:28 Constexpr new
46:10 Перегрузка кавычек
01:00:40 Квадранты вычислений и boost::hana
01:15:30 Литература

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

Развлекательный аспект, стремительно нарастающий в предыдущих лекциях, кажется, достиг апогея. Спасибо!

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

47:10 Только что выяснил, что в С++23 сделали deprecated наличие пробела между "" и _ в названии оператора (CWG-2521. User-defined literals and reserved identifiers). На данный момент повсеместно используется на слайдах

ddvamp
Автор

13:50 Класс литерального типа ещё должен иметь constexpr destructor, который в данном случае (если не ошибаюсь) constexpr-suitable и defaulted, поэтому constexpr сам по себе.

ddvamp
Автор

на моменте с "сим-сим откройся" понял, что на долго отвлекся на проверку фокуса с пальцем.

vadimkozub
Автор

На 65 слаиде constexpr пройдет (если удолити "delete p" ) а вот consteval уже выдаст ошибку компиляции. В случаи constexpr и удоленном "delete p" просто будет вызов функции. Это я так для точности :)

arturzaiat
Автор

На 90 слайде опечатка в фамилии у Jason Turner-а.

yogthemuskrat
Автор

34:36
Если компилятор и так помнит типы классов, зачем помечать методы data как виртуальные? Из такого утверждения логично предположить, что и с обычными методами результат будет аналогичный, но на практике в цикле всегда вызывается Base::data.

danielkeehl
Автор

Константин, спасибо.
Вопрос - нет ли прямой связи между возможностью вызова "виртуальных" методов на этапе компиляции и теми оптимизациями, которые компилятор делает по части девиртуализации вызовов и вне constexpr-контекста??

yogthemuskrat
Автор

А разве не так? char* nextdst = !next ? next : &result[N1 - 1];

yourline