Новый стандарт C++: ключевые изменения в свежем релизе

Онлайн-тренажер Python для начинающих

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

Начать курс

Вышел новый релиз C++: что изменилось в языке программирования

Международный комитет по стандартизации C++ (ISO/IEC JTC1/SC22/WG21) официально утвердил очередную версию стандарта — C++23. Этот релиз приносит долгожданные улучшения, которые делают язык более безопасным, выразительным и удобным для разработки как системного, так и прикладного ПО. Рассказываем о самых значимых нововведениях.

Главные изменения в C++23

1. std::print — форматированный вывод без лишних усилий

Одной из самых заметных фич стало появление функции std::print. Теперь для вывода в стандартный поток не нужно писать громоздкие конструкции с std::cout или использовать printf с риском ошибок типов. std::print работает на основе std::format, обеспечивая типобезопасность и читаемость:

  • Автоматическое форматирование чисел, строк и пользовательских типов.
  • Поддержка локалей и Unicode.
  • Скорость близка к printf, но без утечек памяти.

2. Улучшенная работа с корутинами

Корутины, впервые появившиеся в C++20, получили ряд исправлений и дополнений. В C++23 упростился синтаксис объявления асинхронных функций, а также добавлена поддержка std::generator — нового типа для создания последовательностей значений на лету:

  • Генераторы позволяют писать ленивые вычисления без ручного управления состоянием.
  • Уменьшился объем шаблонного кода для работы с корутинами.

3. Модули — стабильность и производительность

Хотя модули были введены в C++20, их реализация в компиляторах оставляла желать лучшего. В новом стандарте уточнены правила экспорта и импорта, что привело к:

  • Сокращению времени компиляции крупных проектов до 2–3 раз.
  • Полной совместимости с заголовочными файлами (гибридный режим).
  • Возможности создавать модули для стандартной библиотеки (экспериментально).

4. Новые возможности constexpr и consteval

Расширение контекста константных выражений — одна из главных целей развития C++. В C++23 разрешено использовать constexpr для:

  • Динамического выделения памяти (std::vector и std::string).
  • Вызова виртуальных функций.
  • Работы с плавающей точкой без потери точности.

Это позволяет выполнять всё больше вычислений на этапе компиляции, ускоряя runtime.

5. Атрибут [[assume]] — подсказки оптимизатору

Новый атрибут [[assume(выражение)]] сообщает компилятору, что выражение истинно в данной точке кода. Это даёт:

  • Более агрессивные оптимизации (удаление ветвлений, свёртка циклов).
  • Повышение производительности в критических участках (игровые движки, embedded).

6. Упрощение многопоточности

Добавлены новые типы для синхронизации: std::counting_semaphore с улучшенной производительностью и std::latch для одноразовых барьеров. Кроме того, появилась поддержка std::mdspan

Рекомендуем библотеки