Библиотека утилит
В C++ имеется ряд библиотек утилит, обеспечивающих функциональность от подсчета битов до частичного применения функций. Данные библиотеки можно условно разделить на две группы:
- библиотеки поддержки языка, и
- библиотеки общего назначения.
Поддержка языка
Библиотеки поддержки языка предоставляют классы и функции, тесно взаимодействующие с языковыми возможностями и поддерживающие распространенные языковые идиомы.
Поддержка типов
Базовые типы (напр. std::size_t, std::nullptr_t), RTTI (напр. std::type_info), типы-признаки (напр. std::is_integral, std::rank)
Контекст постоянной оценки
Определено в заголовке <type_traits> |
|
|---|---|
|
(C++20) | определяет, происходит ли вызов в контексте постоянной оценки (функция) |
|
(C++26) | проверяет, находится ли указатель в пределах времени жизни объекта во время компиляции (функция) |
Свойства реализации
| Заголовок | (с C++20) |
Утилиты для программ
Завершение (напр. 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)
Захват информации из исходного кода
Определено в заголовке <source_location> |
|
|---|---|
|
(C++20) | класс, представляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций (класс) |
Поддержка отладки
Определено в заголовке <debugging> |
|
|---|---|
|
(C++26) | приостанавливает выполнение программы при вызове (функция) |
|
(C++26) | вызывает std::breakpoint если std::is_debugger_present возвращает true (функция) |
|
(C++26) | проверяет, запускается ли программа под управлением отладчика (функция) |
Инициализаторы списков
Определено в заголовке <initializer_list> |
|
|---|---|
|
(C++11) | создает временный массив в инициализации списком и затем ссылается на него (шаблон класса) |
Трехстороннее сравнение
Определено в заголовочном файле <compare> |
|
|---|---|
|
(C++20) | указывает, что оператор <=> производит согласованный результат для заданных типов (концепция) |
|
(C++20) | тип результата 3-х мерного сравнения, поддерживающий все 6 операторов, не заменяемый и допускающий несравнимые значения (класс) |
|
(C++20) | тип результата 3-х мерного сравнения, поддерживающий все 6 операторов и не заменяемый (класс) |
|
(C++20) | тип результата 3-х мерного сравнения, поддерживающий все 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++20) |
Функции с переменным числом аргументов
Поддержка функций, принимающих произвольное количество параметров (через, например, va_start, va_arg, va_end).
Общие служебные утилиты
Обмен
Определено в заголовочном файле <utility> |
|
|---|---|
| меняет значения двух объектов (шаблон функции) |
|
|
(C++14) | заменяет аргумент новым значением и возвращает его предыдущее значение (шаблон функции) |
Определено в заголовочном файле <concepts> |
|
|
(C++20) | меняет значения двух объектов (объект точки кастомизации) |
Операции с типами
Определено в заголовочном файле <utility> |
|
|---|---|
|
(C++11) | пересылает аргумент функции (шаблон функции) |
|
(C++23) | пересылает аргумент функции так, как будто он приводится к категории значений и константности выражения указанного типа шаблона аргумента (шаблон функции) |
|
(C++11) | получает ссылку на rvalue (шаблон функции) |
|
(C++11) | получает ссылку на rvalue, если конструктор перемещения не генерирует исключения (шаблон функции) |
|
(C++17) | получает ссылку на const для своего аргумента (шаблон функции) |
|
(C++11) | получает ссылку на свой аргумент для использования в невычисляемом контексте (шаблон функции) |
|
(C++23) | преобразует перечисление в его базовый тип (шаблон функции) |
Функции сравнения целых чисел
Определено в заголовке <utility> |
|
|---|---|
|
(C++20) | сравнивает два целочисленных значения без изменения значения, вызванного преобразованием (шаблон функции) |
|
(C++20) | проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа (шаблон функции) |
Операторы сравнения
Определено в заголовке <utility> |
|
|---|---|
Определено в пространстве имён std::rel_ops |
|
|
(устарело в C++20) | автоматически генерирует операторы сравнения на основе определённого пользователем operator== и operator< (шаблон функции) |
Пары и кортежи
Определено в заголовке <utility> |
|
|---|---|
| реализует бинарный кортеж, т.е. пару значений (шаблон класса) |
|
|
(C++11) | тег для поэтапного конструирования (тег) |
|
(C++14) | реализует последовательность целых чисел во время компиляции (шаблон класса) |
Определено в заголовке <tuple> |
|
|
(C++11) | реализует контейнер с фиксированным размером, который хранит элементы, возможно, разных типов (шаблон класса) |
|
(C++17) | вызывает функцию с кортежем аргументов (шаблон функции) |
|
(C++17) | создаёт объект с кортежем аргументов (шаблон функции) |
Протокол кортежей |
|
Определено в заголовке <tuple> |
|
Определено в заголовке <utility> |
|
Определено в заголовке <array> |
|
Определено в заголовке <ranges> |
|
|
(C++11) | получает количество элементов типа, похожего на кортеж (шаблон класса) |
|
(C++11) | получает типы элементов типа, похожего на кортеж (шаблон класса) |
Типы сумм и обёртки с типом, удалённым из исходного кода
Определено в заголовке <optional> |
|
|---|---|
|
(C++17) | оболочка, которая может или не может содержать объект (шаблон класса) |
Определено в заголовке <expected> |
|
|
(C++23) | оболочка, которая содержит ожидаемое или ошибочное значение (шаблон класса) |
Определено в заголовке <variant> |
|
|
(C++17) | безопасный по типу дизъюнкционный союз (шаблон класса) |
Определено в заголовке <any> |
|
|
(C++17) | объекты, которые содержат экземпляры любого типа CopyConstructible (класс) |
Определено в заголовке <utility> |
|
|
(C++17) | тег для конструирования на месте (тег) |
Битовый массив
Определено в заголовке <bitset> |
|
|---|---|
| реализует битовый массив постоянной длины (шаблон класса) |
|
Функциональные объекты
Частичное применение функций (например, std::bind) и связанные с ним утилиты: утилиты для привязки, такие как std::ref и std::placeholders, полиморфные обёртки для функций: std::function, предопределённые функционалы (например, std::plus, std::equal_to), преобразователи указателя на член в функцию std::mem_fn.
Поддержка хеширования
Определено в заголовке <functional> |
|
|---|---|
|
(C++11) | объект функции хеширования (шаблон класса) |
Дата и время
Отслеживание времени (например, std::chrono::time_point, std::chrono::duration), дата и время в стиле C (например, std::time, std::clock)
Элементарные преобразования строк
В дополнение к сложным зависимым от локали парсерам и форматировщикам, предоставляемым библиотекой C++ I/O, библиотекой C I/O, преобразователями строк C++ и преобразователями строк C, заголовок <charconv> предоставляет лёгкие, независимые от локали, не выделяющие память, не бросающие исключений парсеры и форматировщики для арифметических типов.
Определено в заголовке <charconv> |
|
|---|---|
|
(C++17) | преобразует целое или дробное значение в последовательность символов (функция) |
|
(C++17) | тип возвращаемого значения функции std::to_chars (класс) |
|
(C++17) | преобразует последовательность символов в целое или дробное значение (функция) |
|
(C++17) | тип возвращаемого значения функции std::from_chars (класс) |
|
(C++17) | определяет форматирование для std::to_chars и std::from_chars (перечисление) |
Библиотека форматирования
Средства для безопасного форматирования строк с учетом типов.
Определено в заголовке <format> |
|
|---|---|
|
(C++20) | хранит отформатированное представление аргументов в новой строке (шаблон функции) |
|
(C++20) | записывает отформатированное представление аргументов через итератор вывода (шаблон функции) |
|
(C++20) | записывает отформатированное представление аргументов через итератор вывода, не превышая заданного размера (шаблон функции) |
|
(C++20) | определяет количество символов, необходимых для хранения отформатированного представления аргументов (шаблон функции) |
|
(C++20) | нешаблонная версия std::format с использованием представления аргументов без типов (функция) |
|
(C++20) | нешаблонная версия std::format_to с использованием представления аргументов без типов (шаблон функции) |
|
(C++20) | определяет правила форматирования для данного типа (шаблон класса) |
|
(C++20) | тип исключения, выбрасываемый при ошибках форматирования (класс) |
См. также
| Документация по C для библиотеки функций |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility