Библиотека утилит
C++ включает в себя множество полезных библиотек, которые обеспечивают различную функциональность, работая на разных уровнях абстракции, включая, например управление битами и частичное применение функции. Эти библиотеки можно разделить на две группы:
- библиотеки для поддержки языка;
- библиотеки общего назначения.
Содержание
|
[править]Поддержка языка
Библиотеки поддержки языка предоставляют классы и функции, тесно связанные с возможностями языка и служащие для поддержки общих языковых идиом.
[править]Подержка типов
Базовые типы (например, std::size_t, std::nullptr_t), RTTI (например, std::type_info), свойства типа (например, std::is_integral, std::rank)
[править]Контекст оценки константы
Определены в заголовочном файле <type_traits> | |
(C++20) | определяет, происходит ли вызов в контексте вычисления константы (функция) |
(C++26) | проверяет, находится ли указатель в пределах времени жизни объекта во время компиляции (функция) |
[править]Свойства реализации
Заголовок <version> предоставляет зависящую от реализации информацию о стандартной библиотеке C++ (такую как номер версии и дата выпуска). Он также объявляет макросы тестирования возможностей библиотеки. | (начиная с C++20) |
[править] Программные утилиты
- Прерывание (например, std::abort, std::atexit)
- Окружение (например, std::system)
- Сигналы (например, std::raise)
[править]Динамическое управление памятью
- Умные указатели (например, std::shared_ptr).
- Распределители (например, std::allocator или std::pmr::memory_resource).
- Управление памятью в стиле C (например, std::malloc).
[править]Доступ к объекту
Определены в заголовочном файле <new> | |
(C++17) | барьер оптимизации указателя (шаблон функции) |
[править]Обработка ошибок
- Исключения (например, std::exception, std::terminate).
- Утверждения (например, assert).
- Утверждения времени компиляции (static_assert).
[править]Сбор информации об исходном коде
Определены в заголовочном файле <source_location> | |
(C++20) | класс, предоставляющий информацию об исходном коде, такую как имена файлов, номера строк и имена функций (класс) |
[править]Списки инициализации
Определены в заголовочном файле <initializer_list> | |
(C++11) | создаёт временный массив в списке инициализации, а затем ссылается на него (шаблон класса) |
[править]Трёхстороннее сравнение
Определены в заголовочном файле <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 (объект точки настройки) |
выполняет трёхстороннее сравнение и возвращает результат типа std::strong_ordering , даже если operator<=> недоступен (объект точки настройки) | |
(C++20) | выполняет трёхстороннее сравнение и возвращает результат типа std::weak_ordering , даже если operator<=> недоступен (объект точки настройки) |
выполняет трёхстороннее сравнение и возвращает результат типа std::partial_ordering , даже если operator<=> недоступен (объект точки настройки) |
[править]Поддержка сопрограмм
Типы для поддержки сопрограмм, например std::coroutine_traits, std::coroutine_handle. | (начиная с 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) | получает ссылку на константу её аргумента (шаблон функции) |
(C++11) | получает ссылку на свой аргумент для использования в невычисленном контексте (шаблон функции) |
(C++23) | преобразует перечисление в его базовый тип (шаблон функции) |
[править]Целочисленные функции сравнения
Определены в заголовочном файле <utility> | |
сравнивает два целых значения без изменения значения, вызванного преобразованием (шаблон функции) | |
(C++20) | проверяет, находится ли целочисленное значение в диапазоне заданного целочисленного типа (шаблон функции) |
[править]Операторы отношения
Определены в заголовочном файле <utility> | |
Определены в пространстве имён std::rel_ops | |
(устарело в C++20) | автоматически генерирует операторы сравнения на основе определённых пользователем operator== и operator< (шаблон функции) |
[править]Пары и кортежи
Определены в заголовочном файле <utility> | |
реализует двойной кортеж, т.е. пару значений (шаблон класса) | |
(C++11) | объект типа piecewise_construct_t , используемый для устранения неоднозначности функций для кусочного построения (константа) |
(C++14) | реализует последовательность целых чисел на этапе компиляции (шаблон класса) |
Определены в заголовочном файле <tuple> | |
(C++11) | реализует контейнер фиксированного размера, который содержит элементы, возможно, разных типов (шаблон класса) |
(C++17) | вызывает функцию с кортежем аргументов (шаблон функции) |
(C++17) | создаёт объект с кортежем аргументов (шаблон функции) |
Протокол кортежа | |
Определены в заголовочном файле <tuple> | |
Определены в заголовочном файле <utility> | |
Определены в заголовочном файле <array> | |
Определены в заголовочном файле <ranges> | |
(C++11) | получает количество элементов tuple подобного типа (шаблон класса) |
(C++11) | получает типы элементов tuple подобного типа (шаблон класса) |
[править]Типы сумм и удаляемые оболочки типов
Определены в заголовочном файле <optional> | |
(C++17) | обёртка, которая может содержать или не содержать объект (шаблон класса) |
Определены в заголовочном файле <expected> | |
(C++23) | оболочка, содержащая либо ожидаемое значение, либо значение ошибки (шаблон класса) |
Определены в заголовочном файле <variant> | |
(C++17) | типобезопасное размеченное объединение (шаблон класса) |
Определены в заголовочном файле <any> | |
(C++17) | объекты, содержащие экземпляры любого CopyConstructible типа. (класс) |
Определены в заголовочном файле <utility> | |
тэг конструирования на месте (шаблон класса) |
[править]Набор битов
Определены в заголовочном файле <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++ Ввода/Вывода, библиотекой C Ввода/Вывода, Конвертерами строк 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 по Библиотека утилит |