Конспекты содержат немалое количество ошибок, которые были обнаружены во время подготовки к экзаменам, но не были исправлены в этих версиях, а исправленные версии утеряны… Так что повторно проверяйте сами всё…
Если есть желание, можете помочь сделать конспекты еще лучше, отправив нам issue или pull request с изменениями
Лекции .pdf Контекст для LLMПричины появления многопоточности, начиная с закона Мура и ограничений роста производительности процессоров. Вводятся базовые понятия потоков и параллельного выполнения.
Concepts как современная замена SFINAE-трюков для ограничения шаблонных параметров. Объясняется, зачем нужны концепты и как они делают ограничения читаемыми.
Продолжение темы метапрограммирования через type traits вроде is_same. Показывается, как компилятор через специализации шаблонов выводит свойства типов ещё до запуска программы.
Введение в шаблонное метапрограммирование и вычисления на этапе компиляции. Разбирается порядок выбора специализаций шаблонов на примере собственной реализации is_same.
Реализация собственного tuple с использованием шаблонной рекурсии по пакету типов. Разбирается доступ к N-му элементу и различие между TAD и CTAD.
Вариативные шаблоны и пакеты параметров, появившиеся в C++11. Показывается рекурсивная обработка аргументов и возможности оператора развёртки пакета.
Rvalue-ссылки и move-семантика как способ избегать лишних копирований. Рассматриваются move-конструктор, move-присваивание и сворачивание ссылок.
Виды приведения типов в C++ — static_cast, dynamic_cast, const_cast и reinterpret_cast. Разбираются их отличия от C-style cast и ситуации, где каждый из них уместен.
Пошаговая реализация собственного аналога std::function. Показывается, как через специализацию шаблона по сигнатуре вызова строится обёртка для произвольных вызываемых объектов.
Указатели на функции и переход к лямбда-выражениям как более гибкому способу передавать поведение. Разбираются захват переменных и области применения лямбд.
Механизм исключений в C++ и иерархия std::exception. Объясняется, почему бросать типизированные исключения информативнее, чем строки или числа, и как их правильно перехватывать.
Виды ошибок, возникающих в программах, и подходы к их обработке. Рассматриваются коды возврата, assert и другие способы реагировать на некорректные ситуации.
Аллокаторы как механизм управления выделением памяти для контейнеров STL. Объясняется, зачем они нужны и как можно написать собственный аллокатор.
Функциональные объекты (функторы) как альтернатива обычным функциям и указателям на функции. Разбирается их применение в алгоритмах STL на примере реализации собственного remove.
Обзор Standard Template Library и её ключевых компонентов — контейнеров, итераторов и алгоритмов. Показано, как эти части работают вместе для обобщённой обработки данных.
Идиома RAII и её роль в управлении ресурсами. Разбираются умные указатели unique_ptr и shared_ptr как способ автоматизировать освобождение памяти.