Библиотека утилит
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) | ссылается на временный массив, созданный при инициализации списком (шаблон класса) |
Получение сведений об исходном коде (начиная с C++20)
Определён в заголовке <source_location> |
|
|---|---|
|
(C++20) | класс, представляющий сведения об исходном коде, такие как имена файлов, номера строк и имена функций (класс) |
Трёхстороннее сравнение (начиная с C++20)
Определён в заголовке <compare> |
|
|---|---|
|
(C++20)(C++20) | задаёт требование, чтобы оператор <=> давал согласованный результат для заданных типов (концепт) |
|
(C++20) | тип результата трёхстороннего сравнения, поддерживающий все 6 операторов, не допускающий подмены и позволяющий несравнимые значения (класс) |
|
(C++20) | тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и не допускающий подмены (класс) |
|
(C++20) | тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и допускающий подмену (класс) |
|
(C++20) | именованные функции сравнения (функция) |
|
(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++26) | выполняет трёхстороннее сравнение типов (шаблон класса) |
Поддержка сопрограмм (начиная с C++20)
Типы для поддержки сопрограмм (например, std::coroutine_traits, std::coroutine_handle).
Поддержка контрактов (начиная с C++26)
Типы для поддержки контрактов (например, std::contracts::contract_violation).
Утилиты общего назначения
Обмен
Определён в заголовке <utility> |
|
|---|---|
| обменивает значения двух объектов (шаблон функции) |
|
|
(C++14) | заменяет аргумент новым значением и возвращает его предыдущее значение (шаблон функции) |
Определён в заголовке <concepts> |
|
|
(C++20) | обменивает значения двух объектов (объект-точка настройки) |
Операции над типами (начиная с C++11)
Определён в заголовке <utility> |
|
|---|---|
|
(C++11) | передаёт аргумент функции, используя аргумент типа шаблона для сохранения категории значения (шаблон функции) |
|
(C++23) | передаёт аргумент функции так, как если бы он был приведён к категории значения и константности выражения заданного аргумента типа шаблона (шаблон функции) |
|
(C++11) | преобразует аргумент к xvalue (шаблон функции) |
|
(C++11) | преобразует аргумент к xvalue, если конструктор перемещения не выбрасывает исключений (шаблон функции) |
|
(C++17) | получает ссылку на const для своего аргумента (шаблон функции) |
|
(C++11) | получает ссылку на объект типа аргумента шаблона для использования в невычисляемом контексте (шаблон функции) |
|
(C++23) | преобразует перечисление к его базовому типу (шаблон функции) |
Функции сравнения целых чисел (начиная с C++20)
Определён в заголовке <utility> |
|
|---|---|
|
(C++20) | сравнивает два целых числа, гарантируя, что отрицательные числа со знаком меньше беззнаковых чисел (шаблон функции) |
|
(C++20) | проверяет, входит ли целое число в диапазон значений заданного целочисленного типа (шаблон функции) |
Операторы отношений (до C++20)
Определён в заголовке <utility> |
|
|---|---|
Определён в пространстве имён std::rel_ops |
|
|
(устарело в C++20) | автоматически генерирует операторы сравнения на основе определённых пользователем operator== и operator< (шаблон функции) |
Теги конструирования (начиная с C++11)
Определён в заголовке <utility> |
|
|---|---|
|
(C++11) | тег поэлементного конструирования (тег) |
|
(C++17) | тег конструирования на месте (тег) |
|
(C++26) | тег конструирования значения (тег) |
Пары и кортежи
Определён в заголовке <utility> |
|
|---|---|
| реализует бинарный кортеж, то есть пару значений (шаблон класса) |
|
Определён в заголовке <tuple> |
|
|
(C++11) | реализует контейнер фиксированного размера, содержащий элементы, типы которых могут различаться (шаблон класса) |
|
(C++17) | вызывает функцию с кортежем аргументов (шаблон функции) |
|
(C++17) | создаёт объект с помощью кортежа аргументов (шаблон функции) |
Протокол кортежей (начиная с C++11) |
|
Определён в заголовке <tuple> |
|
Определён в заголовке <utility> |
|
Определён в заголовке <array> |
|
Определён в заголовке <ranges> |
|
Определён в заголовке <complex> |
|
|
(C++11) | получает число элементов типа, подобного кортежу (шаблон класса) |
|
(C++11) | получает типы элементов типа, подобного кортежу (шаблон класса) |
Суммарные типы и обёртки со стёртым типом (начиная с C++17)
Определён в заголовке <optional> |
|
|---|---|
|
(C++17) | обёртка, которая может содержать объект или не содержать его (шаблон класса) |
Определён в заголовке <expected> |
|
|
(C++23) | обёртка, содержащая либо ожидаемое значение, либо значение ошибки (шаблон класса) |
Определён в заголовке <variant> |
|
|
(C++17) | типобезопасное размеченное объединение (шаблон класса) |
Определён в заголовке <any> |
|
|
(C++17) | объекты, содержащие экземпляры любого типа CopyConstructible (класс) |
Битовый набор
Определён в заголовке <bitset> |
|
|---|---|
| реализует битовый массив постоянной длины (шаблон класса) |
|
Манипуляции с битами (начиная с C++20)
Заголовок <bit> предоставляет несколько шаблонов функций для доступа к отдельным битам и последовательностям битов, их изменения и обработки. Порядок байтов (порядок следования байтов) скалярных типов можно определить с помощью средства 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 для библиотеки утилит |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility