工具库
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) |
表示关于源码的信息,例如文件名、行号以及函数名的类 (类) |
初始化器列表
在标头
<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) |
转发函数参数,如同用类型为指定的类型模板实参的表达式的值类别与 const 性影响它 (函数模板) |
(C++11) |
获得右值引用 (函数模板) |
(C++11) |
若移动构造函数不抛出则获得右值引用 (函数模板) |
(C++17) |
获得到其实参的 const 引用 (函数模板) |
(C++11) |
获取到其实参的引用,用于不求值语境中 (函数模板) |
(C++23) |
转换枚举到其底层类型 (函数模板) |
整数比较函数
在标头
<utility> 定义 | |
比较二个整数值,而无转换所致的值更改 (函数模板) | |
(C++20) |
检查整数值是否在给定整数类型的范围内 (函数模板) |
关系运算符
在标头
<utility> 定义 | |
在命名空间
std::rel_ops 定义 | |
(C++20 中弃用) |
自动生成基于用户定义的 operator== 和 operator< 的比较运算符 (函数模板) |
对与元组
在标头
<utility> 定义 | |
实现二元组,即一对值 (类模板) | |
(C++11) |
用于为逐段构造选择正确函数重载的标签类型 (类) |
(C++11) |
用于为逐段构造的函数消歧义的 piecewise_construct_t 类型的对象 (常量) |
(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> 定义 | |
原位构造标签 (类模板) |
位集合
在标头
<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) |
在新 string 中存储参数的格式化表示 (函数模板) |
(C++20) |
通过输出迭代器写其参数的格式化表示 (函数模板) |
(C++20) |
通过输出迭代器写其参数的格式化表示,不超出指定的大小 (函数模板) |
(C++20) |
确定存储其参数的格式化表示所需的字符数 (函数模板) |
(C++20) |
std::format 的使用类型擦除的参数表示的非模板变体 (函数) |
(C++20) |
std::format_to 的使用类型擦除的参数表示的非模板变体 (函数模板) |
(C++20) |
定义给定类型的格式化规则的类模板 (类模板) |
(C++20) |
格式化错误时抛出的异常类型 (类) |