Программирование на C++

Авторский 2024/25
Хвастунов Александр Павлович
Всего 16 лекций

Конспекты содержат немалое количество ошибок, которые были обнаружены во время подготовки к экзаменам, но не были исправлены в этих версиях, а исправленные версии утеряны… Так что повторно проверяйте сами всё…

Если есть желание, можете помочь сделать конспекты еще лучше, отправив нам issue или pull request с изменениями

Лекции .pdf Контекст для LLM
Отказ от ответственности
Конспекты предоставляются «как есть» — это студенческие записи, а не официальные материалы. Они могут содержать неточности, пропуски и субъективные интерпретации. Перед экзаменом сверяйтесь с первоисточниками и лекциями преподавателя.

Многопоточность

Причины появления многопоточности, начиная с закона Мура и ограничений роста производительности процессоров. Вводятся базовые понятия потоков и параллельного выполнения.

21 мая
notakeith salt-caramel
,

Концепты

Concepts как современная замена SFINAE-трюков для ограничения шаблонных параметров. Объясняется, зачем нужны концепты и как они делают ограничения читаемыми.

14 мая
notakeith salt-caramel
,

Type traits

Продолжение темы метапрограммирования через type traits вроде is_same. Показывается, как компилятор через специализации шаблонов выводит свойства типов ещё до запуска программы.

07 мая
notakeith salt-caramel
,

Метапрограммирование

Введение в шаблонное метапрограммирование и вычисления на этапе компиляции. Разбирается порядок выбора специализаций шаблонов на примере собственной реализации is_same.

30 апр.
notakeith salt-caramel
,

Tuple

Реализация собственного tuple с использованием шаблонной рекурсии по пакету типов. Разбирается доступ к N-му элементу и различие между TAD и CTAD.

23 апр.
notakeith salt-caramel
,

Parameter pack

Вариативные шаблоны и пакеты параметров, появившиеся в C++11. Показывается рекурсивная обработка аргументов и возможности оператора развёртки пакета.

16 апр.
notakeith salt-caramel
,

Move-семантика

Rvalue-ссылки и move-семантика как способ избегать лишних копирований. Рассматриваются move-конструктор, move-присваивание и сворачивание ссылок.

09 апр.
notakeith salt-caramel
,

Касты

Виды приведения типов в C++ — static_cast, dynamic_cast, const_cast и reinterpret_cast. Разбираются их отличия от C-style cast и ситуации, где каждый из них уместен.

02 апр.
notakeith salt-caramel
,

std::function

Пошаговая реализация собственного аналога std::function. Показывается, как через специализацию шаблона по сигнатуре вызова строится обёртка для произвольных вызываемых объектов.

26 мар.
notakeith salt-caramel
,

Лямбды

Указатели на функции и переход к лямбда-выражениям как более гибкому способу передавать поведение. Разбираются захват переменных и области применения лямбд.

19 мар.
notakeith salt-caramel
,

Исключения

Механизм исключений в C++ и иерархия std::exception. Объясняется, почему бросать типизированные исключения информативнее, чем строки или числа, и как их правильно перехватывать.

12 мар.
notakeith salt-caramel
,

Обработка ошибок

Виды ошибок, возникающих в программах, и подходы к их обработке. Рассматриваются коды возврата, assert и другие способы реагировать на некорректные ситуации.

05 мар.
notakeith salt-caramel
,

Аллокаторы

Аллокаторы как механизм управления выделением памяти для контейнеров STL. Объясняется, зачем они нужны и как можно написать собственный аллокатор.

26 февр.
notakeith salt-caramel
,

Функторы

Функциональные объекты (функторы) как альтернатива обычным функциям и указателям на функции. Разбирается их применение в алгоритмах STL на примере реализации собственного remove.

19 февр.
notakeith salt-caramel
,

STL

Обзор Standard Template Library и её ключевых компонентов — контейнеров, итераторов и алгоритмов. Показано, как эти части работают вместе для обобщённой обработки данных.

12 февр.
notakeith salt-caramel
,

Умные указатели

Идиома RAII и её роль в управлении ресурсами. Разбираются умные указатели unique_ptr и shared_ptr как способ автоматизировать освобождение памяти.

05 февр.
notakeith salt-caramel
,