Вышел новый стандарт 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 — эволюционный шаг, который делает язык безопаснее и удобнее, не жертвуя производительностью.