工具库
C++ 包含了各种工具库,提供了诸如位计数和部分函数应用的功能。这些库大致可以分为两类:
- 语言支持库
 - 通用库
 
语言支持
语言支持库中所提供的类和函数与语言特性紧密相关,用以支持语言中的一些常见的惯用法。
类型支持
基本类型(如 std::size_t 、 std::nullptr_t )、 RTTI (如 std::type_info )、类型特性(如 std::is_integral 、 std::rank )。
实现属性
| (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 )。
源码信息捕获
|   定义于头文件  
<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 )。
通用工具
swap 与类型运算
|   定义于头文件  
<utility>  | |
|    交换两个对象的值   (函数模板)  | |
|    (C++14)  | 
  将实参替换为一个新值,并返回其先前值  (函数模板)  | 
|    (C++11)  | 
  转发一个函数实参  (函数模板)  | 
|    (C++11)  | 
  获得右值引用  (函数模板)  | 
|    (C++11)  | 
  若移动构造函数不抛出则获得右值引用  (函数模板)  | 
|    (C++17)  | 
  获得到其实参的 const 引用  (函数模板)  | 
|    (C++11)  | 
   获取到其实参的引用,用于不求值语境中  (函数模板)  | 
|   定义于头文件  
<concepts>  | |
|    (C++20)  | 
  交换两个对象的值  (定制点对象)  | 
整数比较函数
|   定义于头文件  
<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)  | 
  以一个实参元组构造对象  (函数模板)  | 
optional 、 variant 与 any
|   定义于头文件  
<optional>  | |
|    (C++17)  | 
   可能或可能不保有一个对象的包装器   (类模板)  | 
|   定义于头文件  
<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++ I/O 库、 C I/O 库、 C++ 字符串转换函数和 C 字符串转换函数提供的复杂的本地环境依赖的分析器和格式化器外,头文件 <charconv> 提供对于算术类型的轻量、不依赖本地环境、不分配、不抛出的分析器和格式化器。
|   定义于头文件  
<charconv>  | |
|    (C++17)  | 
  转换整数或浮点值到字符序列  (函数)  | 
|    (C++17)  | 
  转换字符序列到整数或浮点值  (函数)  | 
|    (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)  | 
  格式化错误时抛出的异常类型  (类)  | 
栈踪
|   定义于头文件  
<stacktrace>  | |
|    (C++23)  | 
   栈踪中求值的表示  (类)  | 
|    (C++23)  | 
   由栈踪条目组成的调用序列的近似表示  (类模板)  |