К курсам
AI013 Professional

Современный курс по C++

Этот учебник призван предоставить опытным разработчикам краткую справку по новым функциям C++11/14/17/20. Охватывает улучшения удобства использования языка, повышение производительности во время выполнения, новые контейнеры, умные указатели и управление памятью, регулярные выражения, параллельное программирование и обзор C++20.

4.8
30.0h
318 учеников
2 лайки
Искусственный интеллект
Начать обучение

Обзор курса

📚 Краткое содержание

Этот учебник предназначен для опытных разработчиков и служит краткой справкой по новым возможностям языка C++11/14/17/20. В материале рассматриваются улучшения удобства использования языка, повышение производительности во время выполнения, использование новых контейнеров, умные указатели и управление памятью, регулярные выражения, параллельное программирование, а также обзор языковых возможностей C++20.

Быстро освойте возможности C++11/14/17/20 и пройдите порог современного программирования на языке С++.

Автор: Оу Чанькун (Ou Changkun)

Благодарности: Лицензировано по лицензии CC BY-NC-ND 4.0, благодарность всем участникам проекта на GitHub и связанным сообществам.

🎯 Цели обучения

  1. Определить и проверить среду компиляции C++ и целевую архитектуру с помощью командной строки.
  2. Объяснить совместимость стандартов и исторические пересечения между языками С (C89, C99, C11) и С++ (С++98, С++1x).
  3. Реализовать функциональную межязыковую связь с использованием заголовочных файлов extern "C" и многоэтапных процессов компиляции.
  4. Устранить неоднозначность указателей с помощью nullptr и реализовать логику на этапе компиляции с помощью constexpr и if constexpr.
  5. Упростить сложные объявления с помощью auto, decltype и псевдонимов типов (using), одновременно обеспечив надёжный объектно-ориентированный дизайн с помощью override и final.
  6. Разработать высоконагрузочные универсальные алгоритмы с помощью переменных шаблонов, выражений свёртки и вывода параметров шаблонов без типа.
  7. Определить и реализовать выражения-ламбды с различными режимами захвата (по значению, по ссылке, по выражению, по общему виду).
  8. Использовать std::function и std::bind для создания гибких обёрток функций и частичного применения функций.
  9. Классифицировать выражения как л-значения (Lvalues), промежуточные значения (Prvalues) и временные значения (Xvalues), применяя семантику перемещения для оптимизации управления ресурсами классов.
  10. Отличать модели памяти и области применения std::array (фиксированный размер, стек) и std::vector (динамический размер, куча).

🔹 Урок 1: Историческое развитие С++ и среда разработки

Обзор: Этот урок охватывает техническую основу среды разработки С++ и её историческую связь с языком С. Он подробно рассматривает пересечение стандартов С++ (С++98 — С++1x) и стандартов С (С89 — С11), а также конкретные механизмы, такие как extern "C", необходимые для успешной компиляции и связывания смешанных кодов на С и С++.

Результаты обучения:

  • Определить и проверить среду компиляции С++ и целевую архитектуру с помощью командной строки.
  • Объяснить совместимость стандартов и исторические пересечения между С (С89, С99, С11) и С++ (С++98, С++1x).
  • Реализовать функциональную межязыковую связь с использованием заголовочных файлов extern "C" и многоэтапных процессов компиляции.

🔹 Урок 2: Удобство языка: современный синтаксис и шаблоны

Обзор: Этот урок исследует эволюцию С++ от С++11 до С++20, фокусируясь на улучшениях, повышающих читаемость кода, безопасность типов и гибкость шаблонов. Учащиеся освоят современные синтаксические особенности, такие как вывод типов, вычисления на этапе компиляции с помощью constexpr, а также продвинутые техники шаблонов, включая переменные шаблоны и выражения свёртки.

Результаты обучения:

  • Устранить неоднозначность указателей с помощью nullptr и реализовать логику на этапе компиляции с помощью constexpr и if constexpr.
  • Упростить сложные объявления с помощью auto, decltype и псевдонимов типов (using), при этом обеспечив надёжный объектно-ориентированный дизайн с помощью override и final.
  • Разработать высоконагрузочные универсальные алгоритмы с помощью переменных шаблонов, выражений свёртки и вывода параметров шаблонов без типа.

🔹 Урок 3: Улучшения времени выполнения: лямбды и семантика перемещения

Обзор: Этот урок охватывает ключевые улучшения времени выполнения, введённые в современном С++ (С++11/14), с акцентом на функциональные конструкции и эффективное управление ресурсами. Учащиеся освоют выражения-лямбды — включая генерические лямбды С++14 и захват по выражению — и углубятся в механику семантики перемещения, категорий значений (Л-значения/П-значения) и идеального передачи параметров, чтобы исключить ненужные глубокие копии в высокопроизводительных приложениях.

Результаты обучения:

  • Определить и реализовать выражения-лямбды с различными режимами захвата (по значению, по ссылке, по выражению, по общему виду).
  • Использовать std::function и std::bind для создания гибких обёрток функций и частичного применения функций.
  • Классифицировать выражения как л-значения (Lvalues), промежуточные значения (Prvalues) и временные значения (Xvalues), применяя семантику перемещения для оптимизации управления ресурсами классов.

🔹 Урок 4: Современные контейнеры: std::array

Обзор: Этот урок знакомит с std::array — контейнером, представленным в С++11 как современная альтернатива традиционным массивам С-стиля. Рассматриваются преимущества использования контейнера фиксированного размера, который инкапсулирует сырые массивы, предоставляя более безопасный интерфейс, совместимый со STL, и выделение памяти на стеке.

Результаты обучения:

  • Отличать модели памяти и области применения std::array (фиксированный размер, стек) и std::vector (динамический размер, куча).
  • Правильно инициализировать и управлять std::array с помощью методов, таких как .size() и .empty().
  • Применять алгоритмы библиотеки стандартных шаблонов (STL) и циклы по диапазонам к объектам std::array.

🔹 Урок 5: Умные указатели и управление памятью по принципу RAII

Обзор: Этот урок представляет философию управления памятью в современном С++ — «приобретение ресурса при инициализации» (RAII). Рассматривается переход от ручного управления указателями к автоматизированному управлению с помощью std::unique_ptr для эксклюзивного владения, std::shared_ptr для разделяемого доступа с подсчётом ссылок и std::weak_ptr для разрыва циклических зависимостей.

Результаты обучения:

  • Понимать и применять принцип RAII для обеспечения освобождения ресурсов при выходе из области видимости.
  • Реализовывать модели общего и эксклюзивного владения с помощью std::shared_ptr и std::unique_ptr.
  • Выявлять и устранять утечки памяти, вызванные циклическими ссылками, с помощью std::weak_ptr.

🔹 Урок 6: Регулярные выражения и анализ строк

Обзор: Этот урок описывает реализацию регулярных выражений с использованием стандартной библиотеки С++11 (std::regex) и их практическое применение для анализа HTTP-запросов. Учащиеся узнают синтаксис кванторов регулярных выражений, использование std::smatch для захвата результатов и архитектурную интеграцию этих инструментов в среду веб-сервера на основе шаблонов.

Результаты обучения:

  • Определять и применять специальные символы регулярных выражений (кванторы) для определения шаблонов строк.
  • Использовать std::regex и std::smatch для проверки имён файлов и извлечения данных из строк.
  • Реализовать основную логику сервера, включая анализ HTTP-запросов и сопоставление ресурсов с использованием современных моделей памяти и контейнеров С++.

🔹 Урок 7: Параллелизм, многопоточность и модели памяти

Обзор: Этот урок описывает фундаментальный сдвиг в С++11 к стандартизованной модели многопоточности. Переход от базового управления потоками и блокировок на основе RAII к продвинутым примитивам синхронизации, таким как будущие значения (futures) и условные переменные, завершается строгой моделью памяти С++11, операциями атомарности и гарантиями согласованности памяти.

Результаты обучения:

  • Управлять жизненным циклом потоков и защищать общие ресурсы с помощью std::thread, std::mutex и обёрток на основе RAII (std::lock_guard, std::unique_lock).
  • Реализовывать асинхронные рабочие процессы и общение между потоками с помощью std::future, std::packaged_task и std::condition_variable.
  • Применять типы std::atomic и выбирать соответствующие стратегии std::memory_order для обеспечения видимости памяти и предотвращения запрещённой перестановки инструкций.

🔹 Урок 8: Стандартная библиотека: обновления файловой системы

Обзор: Этот урок рассматривает эволюцию стандартной библиотеки С++, с акцентом на высокий уровень функций, введённых в С++11 и последующих стандартах. Подчёркивается переход от платформозависимых или низкоуровневых реализаций к стандартизированным, высокоуровневым средствам, таким как std::filesystem и инструменты параллелизма.

Результаты обучения:

  • Определить ключевые компоненты многопоточности, добавленные в стандартную библиотеку в С++11.
  • Распознать std::filesystem как важное расширение для современного управления путями и файлами.
  • Понять роль высокоуровневых абстракций в модернизации разработки на С++.

🔹 Урок 9: Дополнительные современные возможности

Обзор: Этот урок охватывает ряд значимых особенностей, введённых в С++11 и усовершенствованных в последующих стандартах, для повышения безопасности типов, производительности и читаемости кода. Учащиеся узнают о типе long long int для расширенной точности целых чисел, спецификациях исключений с помощью noexcept, улучшенных строках и пользовательских литералах, а также тонком контроле выравнивания памяти через alignof и alignas.

Результаты обучения:

  • Определить и реализовать тип long long int для расширенной точности целых чисел.
  • Применить спецификатор noexcept для оптимизации обработки исключений и использовать оператор noexcept для проверки безопасности функции.
  • Использовать сырные строковые литералы для упрощения определения сложных строк и создавать пользовательские литералы для собственных суффиксов типов.

🔹 Урок 10: С++20: Будущее языка

Обзор: Этот урок представляет «четыре главных столпа» С++20: Концепты, Модули, Корутины и Диапазоны. Эти возможности представляют собой наиболее значимое развитие языка после С++11, с фокусом на повышение безопасности шаблонов, эффективность компиляции, асинхронное программирование и обработку данных в функциональном стиле.

Результаты обучения:

  • Определить и описать четыре основные особенности, введённые в стандарте С++20.
  • Объяснить роль концептов и ограничений в улучшении обработки ошибок шаблонов и проектирования.
  • Отличать традиционный подход на основе заголовочных файлов от новой системы модулей.