实用工具库
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) |
转发函数参数,如同将其转换为指定类型模板参数的值类别和 constness (函数模板) |
(C++11) |
将参数转换为亡值 (函数模板) |
(C++11) |
如果移动构造函数不抛出异常,则将参数转换为亡值 (函数模板) |
(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) |
保存任意 可复制构造 类型实例的对象 (类) |
[编辑] 位集
定义于头文件
<bitset> | |
实现固定长度位数组 (类模板) |
[编辑] 位操作 (C++20起)
头文件 <bit> 提供了多个函数模板用于访问、操作和处理单个位和位序列。可以通过 std::endian 工具检查标量类型的字节序(endianness)。
[编辑] 函数对象 (C++11起)
局部函数应用(例如 std::bind)及相关实用工具:绑定实用工具如 std::ref 和 std::placeholders,多态函数包装器:std::function,预定义函数对象(例如 std::plus, std::equal_to),成员指针到函数转换器 std::mem_fn。
[编辑] 哈希支持 (C++11起)
定义于头文件
<functional> | |
(C++11) |
哈希函数对象 (类模板) |
[编辑] 另请参阅
C 文档 用于 实用工具库
|