Spec-Zone.ru › C++

Библиотека утилит

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>
initializer_list
(C++11)
ссылается на временный массив, созданный при инициализации списком
(шаблон класса)

Получение сведений об исходном коде (начиная с C++20)

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

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

Определён в заголовке <compare>
three_way_comparablethree_way_comparable_with
(C++20)(C++20)
задаёт требование, чтобы оператор <=> давал согласованный результат для заданных типов
(концепт)
partial_ordering
(C++20)
тип результата трёхстороннего сравнения, поддерживающий все 6 операторов, не допускающий подмены и позволяющий несравнимые значения
(класс)
weak_ordering
(C++20)
тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и не допускающий подмены
(класс)
strong_ordering
(C++20)
тип результата трёхстороннего сравнения, поддерживающий все 6 операторов и допускающий подмену
(класс)
is_eqis_neqis_ltis_lteqis_gtis_gteq
(C++20)
именованные функции сравнения
(функция)
compare_three_way
(C++20)
ограниченный объект-функция, реализующий x <=> y
(класс)
compare_three_way_result
(C++20)
получает тип результата оператора трёхстороннего сравнения <=> для заданных типов
(шаблон класса)
common_comparison_category
(C++20)
наиболее строгая категория сравнения, к которой можно преобразовать все заданные типы
(шаблон класса)
strong_order
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::strong_ordering
(объект-точка настройки)
weak_order
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::weak_ordering
(объект-точка настройки)
partial_order
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering
(объект-точка настройки)
compare_strong_order_fallback
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::strong_ordering, даже если operator<=> недоступен
(объект-точка настройки)
compare_weak_order_fallback
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::weak_ordering, даже если operator<=> недоступен
(объект-точка настройки)
compare_partial_order_fallback
(C++20)
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering, даже если operator<=> недоступен
(объект-точка настройки)
type_order
(C++26)
выполняет трёхстороннее сравнение типов
(шаблон класса)

Поддержка сопрограмм (начиная с C++20)

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

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

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

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

Обмен

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

Операции над типами (начиная с C++11)

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

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

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

Операторы отношений (до C++20)

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

Теги конструирования (начиная с C++11)

Определён в заголовке <utility>
piecewise_constructpiecewise_construct_t
(C++11)
тег поэлементного конструирования
(тег)
in_placein_place_typein_place_indexin_place_tin_place_type_tin_place_index_t
(C++17)
тег конструирования на месте
(тег)
nontype nontype_t
(C++26)
тег конструирования значения
(тег)

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

Определён в заголовке <utility>
pair
реализует бинарный кортеж, то есть пару значений
(шаблон класса)
Определён в заголовке <tuple>
tuple
(C++11)
реализует контейнер фиксированного размера, содержащий элементы, типы которых могут различаться
(шаблон класса)
apply
(C++17)
вызывает функцию с кортежем аргументов
(шаблон функции)
make_from_tuple
(C++17)
создаёт объект с помощью кортежа аргументов
(шаблон функции)
Протокол кортежей (начиная с C++11)
Определён в заголовке <tuple>
Определён в заголовке <utility>
Определён в заголовке <array>
Определён в заголовке <ranges>
Определён в заголовке <complex>
tuple_size
(C++11)
получает число элементов типа, подобного кортежу
(шаблон класса)
tuple_element
(C++11)
получает типы элементов типа, подобного кортежу
(шаблон класса)

Суммарные типы и обёртки со стёртым типом (начиная с C++17)

Определён в заголовке <optional>
optional
(C++17)
обёртка, которая может содержать объект или не содержать его
(шаблон класса)
Определён в заголовке <expected>
expected
(C++23)
обёртка, содержащая либо ожидаемое значение, либо значение ошибки
(шаблон класса)
Определён в заголовке <variant>
variant
(C++17)
типобезопасное размеченное объединение
(шаблон класса)
Определён в заголовке <any>
any
(C++17)
объекты, содержащие экземпляры любого типа CopyConstructible
(класс)

Битовый набор

Определён в заголовке <bitset>
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>
hash
(C++11)
объект хеш-функции
(шаблон класса)

См. также

Документация по C для библиотеки утилит

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API