Вышел C++23: обзор ключевых изменений нового стандарта

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

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

Начать курс

Вышел C++23: обзор ключевых изменений нового стандарта

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

Главные новинки C++23

1. std::print и std::println — современная замена cout

Пожалуй, самое заметное изменение для повседневного программирования. В стандартную библиотеку добавлены функции std::print и std::println, основанные на мощном форматировании из std::format (C++20). Теперь вывод в консоль стал не только удобнее, но и значительно быстрее, чем через std::cout.

  • Пример: std::println("Привет, {}! Ответ: {}", name, 42);
  • Преимущества: типобезопасность, читаемый синтаксис, поддержка Unicode.

2. deducing this (P0847R7) — явное указание на this

Одно из самых мощных нововведений для метапрограммирования и создания библиотек. Теперь можно явно передавать объект this как параметр функции-члена. Это решает старые проблемы с лямбдами и CRTP (Curiously Recurring Template Pattern).

  • Позволяет писать одну функцию-член, которая работает и с const, и с не-const объектами.
  • Упрощает реализацию паттерна "перегрузка по квалификаторам".

3. Многомерные операторы operator[] (P2128R6)

Долгожданная возможность — теперь operator[] может принимать несколько аргументов. Это критически важно для библиотек, работающих с многомерными массивами (например, mdspan или собственные матрицы).

  • Было: matrix(2, 3) или matrix[{2,3}]
  • Стало: matrix[2, 3] — естественно и кратко.

4. std::expected — функциональная обработка ошибок

Альтернатива исключениям и кодам возврата. Тип std::expected<T, E> содержит либо корректное значение, либо ошибку. Это особенно ценно в системах, где исключения запрещены (встраиваемые системы, ядра ОС).

5. Улучшения модулей и концептов

Модули (C++20) получили исправления и стабилизацию. Теперь они лучше поддерживаются компиляторами. Концепты стали более гибкими, добавлена возможность использовать auto в параметрах концептов.

Что ещё стоит отметить?

  • std::mdspan — многомерный span для работы с массивами.
  • Исправления в std::ranges — стабилизация и закрытие пробелов в API.
  • Атрибут [[assume]] — подсказки компилятору для оптимизации.
  • Статические вызовы operator() — возможность

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