Utility library
C++ включает разнообразные библиотеки утилит, предоставляющие функциональность от подсчёта битов до частичного применения функций . Эти библиотеки можно условно разделить на две группы:
- библиотеки поддержки языков, и
- универсальные библиотеки.
Поддержка языков
Библиотеки поддержки языка предоставляют классы и функции, которые тесно взаимодействуют с возможностями языка и поддерживают распространённые языковые идиомы.
Свойства реализации (начиная с C++20)
Заголовок <version> предоставляет зависящую от реализации информацию о стандартной библиотеке C++ (такую как номер версии и дата выпуска). Он также определяет макросы проверки возможностей библиотеки .
Поддержка типов
Базовые типы (например, std::size_t , std::nullptr_t ), RTTI (например, std::type_info )
Утилиты программ
Завершение работы (например, std::abort , std::atexit ), среда выполнения (например, std::system ), сигналы (например, std::raise ).
Управление динамической памятью
Умные указатели (например, std::shared_ptr ), аллокаторы (например, std::allocator или std::pmr::memory_resource ), управление памятью в стиле C (например, std::malloc ).
Обработка ошибок
Исключения (например, std::exception , std::terminate ), утверждения (например, assert ).
Вариативные функции
Поддержка функций, принимающих произвольное количество параметров (с помощью, например, va_start , va_arg , va_end ).
Списки инициализации (начиная с C++11)
|
Определено в заголовочном файле
<initializer_list>
|
|
|
(C++11)
|
ссылается на временный массив, созданный при
list-initialization
(шаблон класса) |
Захват информации об исходном коде (начиная с C++20)
|
Определено в заголовочном файле
<source_location>
|
|
|
(C++20)
|
класс, представляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций
(класс) |
Трехстороннее сравнение (since C++20)
|
Определено в заголовке
<compare>
|
|
|
указывает, что оператор
<=>
дает согласованный результат для заданных типов
(концепт) |
|
|
(C++20)
|
тип результата трехстороннего сравнения, который поддерживает все 6 операторов, не является заменяемым и допускает несравнимые значения
(класс) |
|
(C++20)
|
тип результата трехстороннего сравнения, который поддерживает все 6 операторов и не является заменяемым
(класс) |
|
(C++20)
|
тип результата трехстороннего сравнения, который поддерживает все 6 операторов и является заменяемым
(класс) |
|
именованные функции сравнения
(функция) |
|
|
(C++20)
|
ограниченный функциональный объект, реализующий
x
<=>
y
(класс) |
|
(C++20)
|
получает тип результата оператора трехстороннего сравнения
<=>
для заданных типов
(шаблон класса) |
|
(C++20)
|
самая сильная категория сравнения, к которой могут быть преобразованы все заданные типы
(шаблон класса) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::strong_ordering
(объект точки настройки) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::weak_ordering
(объект точки настройки) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::partial_ordering
(объект точки настройки) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::strong_ordering
, даже если
operator
<=>
недоступен
(объект точки настройки) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::weak_ordering
, даже если
operator
<=>
недоступен
(объект точки настройки) |
|
(C++20)
|
выполняет трехстороннее сравнение и выдает результат типа
std::partial_ordering
, даже если
operator
<=>
недоступен
(объект точки настройки) |
Поддержка корутин (начиная с C++20)
Типы для поддержки корутин (например, std::coroutine_traits , std::coroutine_handle ).
Поддержка контрактов (начиная с C++26)
Типы для поддержки контрактов (например, std::contracts::contract_violation ).
Утилиты общего назначения
Обмен
|
Определено в заголовочном файле
<utility>
|
|
|
обменивает значения двух объектов
(шаблон функции) |
|
|
(C++14)
|
заменяет аргумент новым значением и возвращает его предыдущее значение
(шаблон функции) |
|
Определено в заголовочном файле
<concepts>
|
|
|
(C++20)
|
обменивает значения двух объектов
(объект точки настройки) |
Операции с типами (since C++11)
|
Определено в заголовочном файле
<utility>
|
|
|
(C++11)
|
перенаправляет аргумент функции и использует тип шаблонного аргумента для сохранения его категории значения
(шаблон функции) |
|
(C++23)
|
перенаправляет аргумент функции как если бы он приводился к категории значения и константности выражения указанного типа шаблонного аргумента
(шаблон функции) |
|
(C++11)
|
преобразует аргумент в xvalue
(шаблон функции) |
|
(C++11)
|
преобразует аргумент в xvalue, если конструктор перемещения не выбрасывает исключений
(шаблон функции) |
|
(C++17)
|
получает ссылку на
const
своего аргумента
(шаблон функции) |
|
(C++11)
|
получает ссылку на объект типа шаблонного аргумента для использования в невычисляемом контексте
(шаблон функции) |
|
(C++23)
|
преобразует перечисление в его базовый тип
(шаблон функции) |
Функции сравнения целых чисел (since C++20)
|
Определено в заголовочном файле
<utility>
|
|
|
сравнивает два целочисленных значения, гарантируя, что знаковые отрицательные числа меньше беззнаковых чисел
(шаблон функции) |
|
|
(C++20)
|
проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа
(шаблон функции) |
Реляционные операторы (до C++20)
|
Определено в заголовочном файле
<utility>
|
|
|
Определено в пространстве имен
std::rel_ops
|
|
|
(устарело в C++20)
|
автоматически генерирует операторы сравнения на основе пользовательских
operator
==
и
operator
<
(шаблон функции) |
Теги конструкций (since C++11)
|
Определено в заголовке
<utility>
|
|
|
тег поэлементного конструирования
(тег) |
|
|
тег конструирования на месте
(тег) |
|
|
(C++26)
|
тег конструирования значения
(тег) |
Пары и кортежи
|
Определено в заголовочном файле
<utility>
|
|
|
реализует бинарный кортеж, т.е. пару значений
(шаблон класса) |
|
|
Определено в заголовочном файле
<tuple>
|
|
|
(C++11)
|
реализует контейнер фиксированного размера, содержащий элементы возможно разных типов
(шаблон класса) |
|
(C++17)
|
вызывает функцию с кортежем аргументов
(шаблон функции) |
|
(C++17)
|
создает объект с кортежем аргументов
(шаблон функции) |
Протокол кортежа (начиная с C++11) |
|
|
Определено в заголовочном файле
<tuple>
|
|
|
Определено в заголовочном файле
<utility>
|
|
|
Определено в заголовочном файле
<array>
|
|
|
Определено в заголовочном файле
<ranges>
|
|
|
Определено в заголовочном файле
<complex>
|
|
|
(C++11)
|
получает количество элементов типа, подобного кортежу
(шаблон класса) |
|
(C++11)
|
получает типы элементов типа, подобного кортежу
(шаблон класса) |
Типы-суммы и стирающие тип обёртки (since C++17)
|
Определено в заголовочном файле
<optional>
|
|
|
(C++17)
|
обёртка, которая может содержать или не содержать объект
(шаблон класса) |
|
Определено в заголовочном файле
<expected>
|
|
|
(C++23)
|
обёртка, содержащая либо ожидаемое значение, либо значение ошибки
(шаблон класса) |
|
Определено в заголовочном файле
<variant>
|
|
|
(C++17)
|
типобезопасное размеченное объединение
(шаблон класса) |
|
Определено в заголовочном файле
<any>
|
|
|
(C++17)
|
объекты, содержащие экземпляры любого
CopyConstructible
типа
(класс) |
Битовый набор
|
Определено в заголовочном файле
<bitset>
|
|
|
реализует битовый массив постоянной длины
(шаблон класса) |
|
Манипуляция битами (начиная с C++20)
Заголовок <bit> предоставляет несколько шаблонов функций для доступа, манипуляции и обработки отдельных битов и битовых последовательностей. Порядок байтов ( endianness ) скалярных типов может быть проверен с помощью std:: endian средства.
Функциональные объекты (начиная с C++11)
Частичное применение функций (например, std::bind ) и связанные утилиты: средства для привязки, такие как std::ref и std::placeholders , полиморфные обёртки функций: std::function , предопределённые функциональные объекты (например, std::plus , std::equal_to ), преобразователи указателей на члены в функции std::mem_fn .
Поддержка хеширования (начиная с C++11)
|
Определено в заголовочном файле
<functional>
|
|
|
(C++11)
|
функциональный объект хеш-функции
(шаблон класса) |
Смотрите также
|
Документация C
для
Библиотеки утилит
|