Namespaces
Variants

Utility library

From cppreference.net
Utilities 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>
ссылается на временный массив, созданный при list-initialization
(шаблон класса)

Захват информации об исходном коде (начиная с C++20)

Определено в заголовочном файле <source_location>
класс, представляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций
(класс)

Трехстороннее сравнение (since C++20)

Определено в заголовке <compare>
указывает, что оператор <=> дает согласованный результат для заданных типов
(концепт)
тип результата трехстороннего сравнения, который поддерживает все 6 операторов, не является заменяемым и допускает несравнимые значения
(класс)
тип результата трехстороннего сравнения, который поддерживает все 6 операторов и не является заменяемым
(класс)
тип результата трехстороннего сравнения, который поддерживает все 6 операторов и является заменяемым
(класс)
именованные функции сравнения
(функция)
ограниченный функциональный объект, реализующий x <=> y
(класс)
получает тип результата оператора трехстороннего сравнения <=> для заданных типов
(шаблон класса)
самая сильная категория сравнения, к которой могут быть преобразованы все заданные типы
(шаблон класса)
выполняет трехстороннее сравнение и выдает результат типа std::strong_ordering
(объект точки настройки)
(C++20)
выполняет трехстороннее сравнение и выдает результат типа std::weak_ordering
(объект точки настройки)
выполняет трехстороннее сравнение и выдает результат типа std::partial_ordering
(объект точки настройки)
выполняет трехстороннее сравнение и выдает результат типа std::strong_ordering , даже если operator <=> недоступен
(объект точки настройки)
выполняет трехстороннее сравнение и выдает результат типа std::weak_ordering , даже если operator <=> недоступен
(объект точки настройки)
выполняет трехстороннее сравнение и выдает результат типа std::partial_ordering , даже если operator <=> недоступен
(объект точки настройки)

Поддержка корутин (начиная с C++20)

Типы для поддержки корутин (например, std::coroutine_traits , std::coroutine_handle ).

Поддержка контрактов (начиная с C++26)

Типы для поддержки контрактов (например, std::contracts::contract_violation ).

Утилиты общего назначения

Обмен

Определено в заголовочном файле <utility>
обменивает значения двух объектов
(шаблон функции)
(C++14)
заменяет аргумент новым значением и возвращает его предыдущее значение
(шаблон функции)
Определено в заголовочном файле <concepts>
обменивает значения двух объектов
(объект точки настройки)

Операции с типами (since C++11)

Определено в заголовочном файле <utility>
(C++11)
перенаправляет аргумент функции и использует тип шаблонного аргумента для сохранения его категории значения
(шаблон функции)
перенаправляет аргумент функции как если бы он приводился к категории значения и константности выражения указанного типа шаблонного аргумента
(шаблон функции)
(C++11)
преобразует аргумент в xvalue
(шаблон функции)
преобразует аргумент в xvalue, если конструктор перемещения не выбрасывает исключений
(шаблон функции)
(C++17)
получает ссылку на const своего аргумента
(шаблон функции)
(C++11)
получает ссылку на объект типа шаблонного аргумента для использования в невычисляемом контексте
(шаблон функции)
преобразует перечисление в его базовый тип
(шаблон функции)

Функции сравнения целых чисел (since C++20)

Определено в заголовочном файле <utility>
сравнивает два целочисленных значения, гарантируя, что знаковые отрицательные числа меньше беззнаковых чисел
(шаблон функции)
(C++20)
проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа
(шаблон функции)

Реляционные операторы (до C++20)

Определено в заголовочном файле <utility>
Определено в пространстве имен std::rel_ops
автоматически генерирует операторы сравнения на основе пользовательских operator == и operator <
(шаблон функции)

Теги конструкций (since C++11)

Определено в заголовке <utility>
тег поэлементного конструирования
(тег)
тег конструирования на месте
(тег)
тег конструирования значения
(тег)

Пары и кортежи

Определено в заголовочном файле <utility>
реализует бинарный кортеж, т.е. пару значений
(шаблон класса)
Определено в заголовочном файле <tuple>
(C++11)
реализует контейнер фиксированного размера, содержащий элементы возможно разных типов
(шаблон класса)
(C++17)
вызывает функцию с кортежем аргументов
(шаблон функции)
создает объект с кортежем аргументов
(шаблон функции)
Протокол кортежа (начиная с C++11)
Определено в заголовочном файле <tuple>
Определено в заголовочном файле <utility>
Определено в заголовочном файле <array>
Определено в заголовочном файле <ranges>
Определено в заголовочном файле <complex>
(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 для Библиотеки утилит