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

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

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

Начать курс

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

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

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

  • Deducing this (P0847R7) — самое ожидаемое нововведение. Теперь можно явно указывать объект, на котором вызывается метод, что упрощает перегрузку для lvalue/rvalue, константных и неконстантных версий, а также избавляет от дублирования кода в CRTP-шаблонах.
  • std::expected (P0323R12) — тип для обработки ошибок без исключений, альтернатива std::optional и исключениям. Позволяет возвращать либо значение, либо ошибку, что критически важно для систем с жёсткими требованиями к производительности.
  • Модули std (P2465R3) — стандартная библиотека теперь экспортируется через модули, что ускоряет компиляцию и улучшает изоляцию кода. Например, import std; заменяет десятки #include.
  • Улучшения корутин — добавлен тип std::generator для ленивых последовательностей и исправлены многие проблемы с производительностью и эргономикой корутин из C++20.
  • Многопоточность — новый механизм std::latch и std::barrier для синхронизации потоков, а также улучшенный std::counting_semaphore.

Что это значит для разработчиков?

C++23 не ломает обратную совместимость, но вводит новые практики. Например, deducing this упрощает написание библиотек, а std::expected постепенно заменит громоздкие проверки кодов возврата. Многие компиляторы (GCC 13+, Clang 16+, MSVC 2022 17.6+) уже поддерживают часть возможностей.

Для тех, кто работает с высоконагруженными системами, особенно важны модули (ускорение сборки на 20-40%) и улучшенная обработка ошибок без исключений. Если вы используете C++20, миграция на C++23 не потребует переписывания кода — достаточно включить новый флаг компиляции.

Когда ждать полной поддержки?

Полная поддержка C++23 ожидается в компиляторах к концу 2024 года. Пока можно тестировать отдельные фичи с флагами -std=c++2b (GCC/Clang) или /std:c++latest (MSVC). Рекомендуем начать с std::expected и deducing this — они наиболее полезны в реальных проектах.

Актуальные примеры кода и сравнение с C++20 вы найдёте в документации компиляторов. C++23 — эволюционный шаг, который делает язык безопаснее и удобнее, не жертвуя производительностью.

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