Utility library
C++包含多种实用工具库,这些库提供的功能范围从 位计数 到 部分函数应用 。这些库大致可分为两类:
- 语言支持库,以及
- 通用库。
目录 |
语言支持
语言支持库提供与语言特性紧密交互并支持常见语言惯用法的类和函数。
实现特性 (since C++20)
头文件 <version> 提供与实现相关的 C++ 标准库信息(例如版本号和发布日期)。它同时定义了 库功能测试宏 。
类型支持
基础类型(例如 std::size_t 、 std::nullptr_t ),运行时类型识别(例如 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)
|
引用在
列表初始化
中创建的临时数组
(类模板) |
源代码信息捕获 (since C++20)
|
定义于头文件
<source_location>
|
|
|
(C++20)
|
表示源代码信息的类,如文件名、行号和函数名
(类) |
三路比较 (since 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
类型结果
(定制点对象) |
|
(C++20)
|
执行三路比较并产生
std::strong_ordering
类型结果,即使
operator
<=>
不可用
(定制点对象) |
|
(C++20)
|
执行三路比较并产生
std::weak_ordering
类型结果,即使
operator
<=>
不可用
(定制点对象) |
|
(C++20)
|
执行三路比较并产生
std::partial_ordering
类型结果,即使
operator
<=>
不可用
(定制点对象) |
协程支持 (since 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)
|
将实参转换为亡值
(函数模板) |
|
(C++11)
|
若移动构造函数不抛出异常,则将实参转换为亡值
(函数模板) |
|
(C++17)
|
获取指向其实参的
const
引用
(函数模板) |
|
(C++11)
|
获取模板类型形参对象的引用,用于不求值语境
(函数模板) |
|
(C++23)
|
将枚举转换为其底层类型
(函数模板) |
整数比较函数 (since C++20)
|
定义于头文件
<utility>
|
|
|
比较两个整数值,确保有符号负数小于无符号数
(函数模板) |
|
|
(C++20)
|
检查整数值是否在给定整数类型的范围内
(函数模板) |
关系运算符 (until C++20)
|
定义于头文件
<utility>
|
|
|
定义于命名空间
std::rel_ops
|
|
|
(C++20 起已弃用)
|
基于用户定义的
operator
==
和
operator
<
自动生成比较运算符
(函数模板) |
构造标签 (始于 C++11)
|
定义于头文件
<utility>
|
|
|
分段构造标签
(标签) |
|
|
原位构造标签
(标签) |
|
|
(C++26)
|
值构造标签
(标签) |
Pairs 与 tuples
|
定义于头文件
<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>
|
|
|
实现常量长度的位数组
(类模板) |
|
位操作 (自 C++20 起)
头文件 <bit> 提供了多个函数模板,用于访问、操作和处理单个比特位及比特序列。可通过 std:: endian 工具检测标量类型的字节序( endianness )。
函数对象 (自 C++11 起)
部分函数应用(例如 std::bind )及相关工具:绑定工具如 std::ref 和 std::placeholders ,多态函数包装器: std::function ,预定义函数对象(例如 std::plus 、 std::equal_to ),成员指针到函数转换器 std::mem_fn 。
哈希支持 (since C++11)
|
定义于头文件
<functional>
|
|
|
(C++11)
|
哈希函数对象
(类模板) |
参见
|
C 文档
关于
实用工具库
|