实用工具库
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> | |
(C++11) |
引用在列表初始化中创建的临时数组 (类模板) |
[编辑] 源代码信息捕获 (C++20 起)
定义于头文件
<source_location> | |
(C++20) |
一个类,表示关于源代码的信息,例如文件名、行号和函数名 (类) |
[编辑] 三路比较 (C++20 起)
定义于头文件
<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<=> 不可用(定制点对象) |
[编辑] 协程支持 (C++20 起)
用于协程支持的类型(例如 std::coroutine_traits, std::coroutine_handle)。
[编辑] 契约支持 (C++26 起)
用于契约支持的类型(例如 std::contracts::contract_violation)。
[编辑] 通用实用工具
[编辑] 交换
定义于头文件
<utility> | |
交换两个对象的值 (函数模板) | |
(C++14) |
用新值替换参数并返回其先前的值 (函数模板) |
定义于头文件
<concepts> | |
(C++20) |
交换两个对象的值 (定制点对象) |
[编辑] 类型操作 (C++11 起)
定义于头文件
<utility> | |
(C++11) |
转发函数参数并使用类型模板参数来保留其值类别 (函数模板) |
(C++23) |
转发函数参数,如同将其强制转换为指定类型模板参数的表达式的值类别和常量性 (函数模板) |
(C++11) |
将参数转换为 xvalue (函数模板) |
(C++11) |
如果移动构造函数不抛出异常,则将参数转换为 xvalue (函数模板) |
(C++17) |
获取对其参数的 const 引用 (函数模板) |
(C++11) |
获取模板类型参数对象的引用,用于未求值语境 (函数模板) |
(C++23) |
将枚举转换为其底层类型 (函数模板) |
[编辑] 整数比较函数 (C++20 起)
定义于头文件
<utility> | |
比较两个整数值,确保有符号负数小于无符号数 (函数模板) | |
(C++20) |
检查整数值是否在给定整数类型的范围内 (函数模板) |
[编辑] 关系运算符 (C++20 前)
定义于头文件
<utility> | |
定义于命名空间
std::rel_ops | |
(C++20 中已弃用) |
基于用户定义的 operator== 和 operator< 自动生成比较运算符 (函数模板) |
[编辑] 构造标签 (C++11 起)
定义于头文件
<utility> | |
分段构造标签 (标签) | |
就地构造标签 (标签) | |
(C++26) |
值构造标签 (标签) |
[编辑] 对组 与 元组
定义于头文件
<utility> | |
实现二元元组,即一对值 (类模板) | |
定义于头文件
<tuple> | |
(C++11) |
实现固定大小的容器,其中保存可能不同类型的元素 (类模板) |
(C++17) |
使用元组参数调用函数 (函数模板) |
(C++17) |
使用元组参数构造对象 (函数模板) |
元组协议 (C++11 起) | |
定义于头文件
<tuple> | |
定义于头文件
<utility> | |
定义于头文件
<array> | |
定义于头文件
<ranges> | |
定义于头文件
<complex> | |
(C++11) |
获取类元组类型的元素数量 (类模板) |
(C++11) |
获取类元组类型的元素类型 (类模板) |
[编辑] 和类型与类型擦除包装器 (C++17 起)
定义于头文件
<optional> | |
(C++17) |
一个可能持有或不持有对象的包装器 (类模板) |
定义于头文件
<expected> | |
(C++23) |
一个包含预期值或错误值的包装器 (类模板) |
定义于头文件
<variant> | |
(C++17) |
类型安全的判别联合 (类模板) |
定义于头文件
<any> | |
(C++17) |
持有任何 可复制构造 (CopyConstructible) 类型的实例的对象 (类) |
[编辑] Bitset
定义于头文件
<bitset> | |
实现恒定长度的位数组 (类模板) |
[编辑] 位操作 (C++20 起)
头文件 <bit> 提供了多个函数模板来访问、操作和处理单个位和位序列。标量类型的字节序 (endianness) 可以通过 std::endian 工具进行检查。
[编辑] 函数对象 (C++11 起)
函数的部分应用(例如 std::bind)和相关实用程序:用于绑定的实用程序,例如 std::ref 和 std::placeholders,多态函数包装器:std::function,预定义仿函数(例如 std::plus, std::equal_to),成员指针到函数转换器 std::mem_fn。
[编辑] 哈希支持 (自 C++11 起)
定义于头文件
<functional> | |
(C++11) |
hash 函数对象 (类模板) |
[编辑] 参见
C 语言文档 关于 实用程序库
|