
Комитет ISO по стандартизации официально утвердил финальную версию спецификации C++26. Многие из предложенных нововведений уже получили предварительную поддержку в популярных компиляторах, таких как GCC, Clang и Microsoft Visual C++, а также в библиотеках проекта Boost.
В ближайшие два месяца документ пройдет этап финальной редакторской вычитки для устранения опечаток. Официальная публикация стандарта под кодовым наименованием ISO/IEC 14882:2026 запланирована на начало ноября.
Ключевые новшества C++26
Стандарт привносит ряд значимых изменений, направленных на повышение производительности, безопасности и удобства написания кода.
Контрактное программирование
Появились механизмы для определения формальных спецификаций интерфейсов с помощью операторов pre (предусловие), post (постусловие) и contract_assert (проверка утверждения). Это позволяет более строго контролировать корректность входных и выходных данных, а также условия возникновения исключений. Поддержка этой функции ожидается в GCC 16.
Рефлексия и метапрограммирование
В C++26 введена полноценная поддержка рефлексии. Новые операторы ^^ (для получения метаинформации) и [: ... :] (для обратного преобразования) в сочетании с библиотекой std::meta позволяют инспектировать и модифицировать структуру программы на стадии компиляции. Дополнительно добавлен оператор template for, упрощающий итерацию по параметрам шаблонов, свойствам классов и перечислениям во время компиляции.
Параллелизм и асинхронность
- std::execution: Новый фреймворк для управления асинхронным выполнением задач с использованием планировщиков (schedulers), отправителей (senders) и получателей (receivers).
- std::simd: Библиотека для высокопроизводительной обработки данных с использованием векторных инструкций процессора (AVX-512, NEON) через стандартные типы C++.
Работа с памятью и структурами данных
- std::inplace_vector: Реализация массива переменного размера, который размещается непосредственно в стеке, что повышает быстродействие по сравнению со стандартным
std::vectorв куче. - std::hive: Структура данных для неупорядоченного хранения, оптимизированная для сценариев с частым добавлением и удалением элементов без сдвига содержимого массива.
- std::linalg: Библиотека для линейной алгебры, базирующаяся на спецификации BLAS.
- Механизмы синхронизации: Внедрена поддержка Hazard pointer для безопасного управления доступом к данным без блокировок и алгоритм RCU (read-copy update), позволяющий выполнять чтение без ожидания завершения операций записи.
Прочие улучшения языка
Список обновлений также включает:
- Директиву
#embedдля встраивания бинарных ресурсов непосредственно в исходный код. - Возможность обработки исключений в контексте
constexpr. - Усиление безопасности за счет проверки выхода за границы буфера в стандартной библиотеке.
- Улучшения структурированных привязок (в том числе в
constexprи с поддержкой захвата пакетов параметров через...). - Поддержку «тривиальной перемещаемости» (trivial relocatability) для оптимизации перемещения объектов.
- Расширенный синтаксис
= delete ("причина")для информативных сообщений об ошибках. - Поддержку использования нескольких переменных-заполнителей
_в одной области видимости. - Включение символов
@,$и`в базовый набор.
В новой версии также проведена «чистка»: устарели неявные преобразования перечислений в арифметических выражениях, прямой доступ для сравнения массивов и некоторые формы вариативных параметров. Кроме того, теперь компилятор будет выдавать ошибку при попытке удаления указателя на неполный тип.






