工具库

来自cppreference.com
< cpp


 
 
 

C++ 包含了各种工具库,提供了诸如位计数部分函数应用的功能。这些库大致可以分为两类:

  • 语言支持库
  • 通用库

语言支持

语言支持库中所提供的类和函数与语言特性紧密相关,用以支持语言中的一些常见的惯用法。

实现属性 (C++20 起)

标头 <version> 提供关于 C++ 标准库的实现依赖信息(例如版本号和发行日期)。它也定义了特性测试宏

类型支持

基本类型(如 std::size_tstd::nullptr_t)、RTTI(如 std::type_info)。

程序工具

终止(如 std::abortstd::atexit),环境(如 std::system),信号(如 std::raise)。

动态内存管理

智能指针(如 std::shared_ptr),分配器(如 std::allocatorstd::pmr::memory_resource),C 风格内存管理(如 std::malloc)。

错误处理

异常(如 std::exceptionstd::terminate),断言(如 assert)。

变参数函数

支持接受任意数量参数的函数(例如通过 va_startva_argva_end)。

初始化器列表 (C++11 起)

在标头 <initializer_list> 定义
引用在列表初始化中创建的临时数组
(类模板)

源码信息捕获 (C++20 起)

在标头 <source_location> 定义
表示关于源代码的信息(例如文件名、行号以及函数名)的类
(类)

三路比较 (C++20 起)

在标头 <compare> 定义
指定运算符 <=> 在给定类型上产生一致的结果
(概念)
三路比较的结果类型,支持所有 6 种运算符且不可替换,并允许不可比较的值
(类)
三路比较的结果类型,支持所有 6 种运算符且不可替换
(类)
三路比较的结果类型,支持所有 6 种运算符且可替换
(类)
具名比较函数
(函数)
实现 x <=> y 的受约束函数对象
(类)
获得三路比较运算符 <=> 在给定类型上的结果
(类模板)
给定的全部类型都能转换到的最强比较类别
(类模板)
进行三路比较并产生 std::strong_ordering 类型的结果
(定制点对象)
进行三路比较并产生 std::weak_ordering 类型的结果
(定制点对象)
进行三路比较并产生 std::partial_ordering 类型的结果
(定制点对象)
进行三路比较并产生 std::strong_ordering 类型的结果,即使 operator<=> 不可用
(定制点对象)
进行三路比较并产生 std::weak_ordering 类型的结果,即使 operator<=> 不可用
(定制点对象)
进行三路比较并产生 std::partial_ordering 类型的结果,即使 operator<=> 不可用
(定制点对象)

协程支持 (C++20 起)

用于协程支持的类型,例如 std::coroutine_traitsstd::coroutine_handle

契约支持 (C++26 起)

用于契约支持的类型,例如 std::contracts::contract_violation

通用工具

交换

在标头 <utility> 定义
交换两个对象的值
(函数模板)
(C++14)
替换实参为一个新值,并返回它先前的值
(函数模板)
在标头 <concepts> 定义
交换两个对象的值
(定制点对象)

类型操作 (C++11 起)

在标头 <utility> 定义
(C++11)
转发一个函数实参,并使用模板实参保留它的值类别
(函数模板)
转发函数实参,如同将它转换为指定的类型模板实参的表达式的值类别与 const 性
(函数模板)
(C++11)
转换实参为亡值
(函数模板)
若移动构造函数不抛出则转换实参为亡值
(函数模板)
(C++17)
获得到其实参的 const 引用
(函数模板)
(C++11)
在不求值语境中获取到模板类型实参的对象的引用
(函数模板)
转换枚举为其底层类型
(函数模板)

整数比较函数 (C++20 起)

在标头 <utility> 定义
比较两个整数,保证有符号负数小于无符号数
(函数模板)
(C++20)
检查整数是否在给定整数类型的范围内
(函数模板)

关系运算符 (C++20 前)

在标头 <utility> 定义
在命名空间 std::rel_ops 定义
基于用户定义的 operator==operator< 自动生成比较运算符
(函数模板)

构造标签 (C++11 起)

在标头 <utility> 定义
逐段构造标签
(标签)
原位构造标签
(类模板)
值构造标签
(标签)

pairtuple

在标头 <utility> 定义
实现二元组,即一对值
(类模板)
逐段构造标签
(标签)
实现编译时整数数列
(类模板)
在标头 <tuple> 定义
(C++11)
实现固定大小的容器,可保有类型相异的元素
(类模板)
(C++17)
以一个实参的元组来调用函数
(函数模板)
以一个实参元组构造对象
(函数模板)
元组协议 (C++11 起)
在标头 <tuple> 定义
在标头 <utility> 定义
在标头 <array> 定义
在标头 <ranges> 定义
获得元组式类型的元素数量
(类模板)
获得元组式类型的元素类型
(类模板)

和类型与类型擦除包装器 (C++17 起)

在标头 <optional> 定义
(C++17)
可能或可能不保有一个对象的包装器
(类模板)
 
在标头 <expected> 定义
(C++23)
含有一个预期值或错误值的包装器
(类模板)
 
在标头 <variant> 定义
(C++17)
类型安全的可辨识联合体
(类模板)
 
在标头 <any> 定义
(C++17)
可保有任何可复制构造 (CopyConstructible) 类型的实例的对象。
(类)
 
在标头 <utility> 定义
原位构造标签
(类模板)

位集合 (C++20 起)

在标头 <bitset> 定义
实现常量长度的位数组
(类模板)

位操纵 (C++20 起)

标头 <bit> 提供几个用于访问、操纵和处理单独的位和位序列的函数模板。可以通过 std::endian 设施来探知标量类型的字节序(端序)。

函数对象 (C++11 起)

部分函数应用(如 std::bind)及相关工具:用于绑定的工具,如 std::refstd::placeholders、多态函数包装器:std::function、预定义函数对象(如 std::plusstd::equal_to)、成员指针到函数转换器 std::mem_fn

散列支持 (C++11 起)

在标头 <functional> 定义
(C++11)
散列函数对象
(类模板)

参阅

工具库C 文档