C++ 标准库头文件

来自cppreference.com
< cpp
 
 
 

C++ 标准库的接口由下列头文件的汇集定义。

概念库

<concepts> (C++20 起) 基础库概念

协程库

<coroutine> (C++20 起) 协程支持库

工具库

<cstdlib> 通用工具:程序控制动态内存分配随机数排序与搜索
<csignal> 信号管理的函数与宏常量
<csetjmp> 保存执行语境的宏,及跳转到某个执行语境的函数
<cstdarg> 变长实参列表的处理
<typeinfo> 运行时类型信息工具
<typeindex> (C++11 起) std::type_index
<type_traits> (C++11 起) 编译时类型信息
<bitset> std::bitset 类模板
<functional> 函数对象、函数调用、绑定操作、引用包装
<utility> 多种工具组件
<ctime> C 风格的时间/日期工具
<chrono> (C++11 起) C++ 时间工具
<cstddef> 标准宏和 typedef
<initializer_list> (C++11 起) std::initializer_list 类模板
<tuple> (C++11 起) std::tuple 类模板
<any> (C++17 起) std::any
<optional> (C++17 起) std::optional 类模板
<variant> (C++17 起) std::variant 类模板
<compare> (C++20 起) 三路比较运算符支持
<version> (C++20 起) 提供依赖于实现的库信息
<source_location> (C++20 起) 提供获得源码位置的手段
动态内存管理
<new> 低层内存管理工具
<memory> 高层内存管理工具
<scoped_allocator> (C++11 起) 嵌套分配器类
<memory_resource> (C++17 起) 多态分配器及内存资源
数值界限
<climits> 整型类型的界限
<cfloat> 浮点类型的界限
<cstdint> (C++11 起) 定长整数其他类型的界限
<cinttypes> (C++11 起) 格式化宏intmax_tuintmax_t,数学工具及转换
<limits> 查询算术类型属性的标准化方式
错误处理
<exception> 异常处理工具
<stdexcept> 标准异常对象
<cassert> 将其实参与零比较的条件性编译宏
<system_error> (C++11 起) 定义 std::error_code,依赖于平台的错误码
<cerrno> 含有最近一次错误号的宏

字符串库

<cctype> 确定字符数据中所含类型的函数
<cwctype> 确定宽字符数据中所含类型的函数
<cstring> 多种窄字符串处理函数
<cwchar> 多种多字节字符串处理函数
<cuchar> (C++11 起) C 风格 Unicode 字符转换函数
<string> std::basic_string 类模板
<string_view> (C++17 起) std::basic_string_view 类模板
<charconv> (C++17 起) std::to_charsstd::from_chars
<format> (C++20 起) 格式化库,包括 std::format

容器库

<array> (C++11 起) std::array 容器
<vector> std::vector 容器
<deque> std::deque 容器
<list> std::list 容器
<forward_list> (C++11 起) std::forward_list 容器
<set> std::setstd::multiset 关联容器
<map> std::mapstd::multimap 关联容器
<unordered_set> (C++11 起) std::unordered_setstd::unordered_multiset 无序关联容器
<unordered_map> (C++11 起) std::unordered_mapstd::unordered_multimap 无序关联容器
<stack> std::stack 容器适配器
<queue> std::queuestd::priority_queue 容器适配器
<span> (C++20 起) std::span 视图

迭代器库

<iterator> 范围迭代器

范围库

<ranges> (C++20 起) 范围访问、原语、要求、工具及适配器

算法库

<algorithm> 对范围操作的算法
<execution> (C++17 起) 针对算法的并行版本的预定义执行策略

数值库

<cmath> 常用数学函数
<complex> 复数类型
<valarray> 表示和操作值的数组的类
<random> (C++11 起) 随机数生成器及分布
<numeric> 容器中值的数值运算
<ratio> (C++11 起) 编译时有理数算术
<cfenv> (C++11 起) 浮点环境访问函数
<bit> (C++20 起) 位操纵函数

输入/输出库

<iosfwd> 所有输入/输出库中的类的前置声明
<ios> std::ios_base 类、std::basic_ios 类模板及数个 typedef
<istream> std::basic_istream 类模板及数个 typedef
<ostream> std::basic_ostreamstd::basic_iostream 类模板及数个 typedef
<iostream> 数个标准流对象
<fstream> std::basic_fstreamstd::basic_ifstreamstd::basic_ofstream 类模板及数个typedef
<sstream> std::basic_stringstreamstd::basic_istringstreamstd::basic_ostringstream 类模板及数个 typedef
<syncstream> (C++20 起) std::basic_osyncstreamstd::basic_syncbuf 及 typedef
<strstream> (C++98 中弃用) std::strstreamstd::istrstreamstd::ostrstream
<iomanip> 控制输入输出格式的辅助函数
<streambuf> std::basic_streambuf 类模板
<cstdio> C 风格输入输出函数

本地化库

<locale> 本地化工具
<clocale> C 本地化工具
<codecvt> (C++11 起)(C++17 中弃用) Unicode 转换设施

正则表达式库

<regex> (C++11 起) 支持正则表达式处理的类、算法及迭代器

原子操作库

<atomic> (C++11 起) 原子操作库

线程支持库

<thread> (C++11 起) std::thread 类及支持函数
<stop_token> (C++20 起) std::jthread 的停止记号
<mutex> (C++11 起) 互斥原语
<shared_mutex> (C++14 起) 共享的互斥原语
<future> (C++11 起) 异步计算的原语
<condition_variable> (C++11 起) 线程等待条件
<semaphore> (C++20 起) 信号量
<latch> (C++20 起)
<barrier> (C++20 起) 屏障

文件系统库

<filesystem> (C++17 起) std::path 类及 支持函数

C 兼容头文件

对于一些拥有 xxx.h 形式的 C 标准库头文件,C++ 标准库同时包含同名的头文件和拥有形式cxxx的头文件(所有有意义的 cxxx 头文件列于上方)。

除了 complex.h 这一例外,C++ 标准库中包含的每个 xxx.h 头文件都将其对应的 cxxx 中本应置于 std 命名空间中的每个名字放在全局命名空间中。

允许这些头文件也在 std 命名空间中声明同样的名字,而且允许对应的 cxxx 头文件也在全局命名空间中声明同样的名字:包含 <cstdlib> 肯定会提供 std::malloc,亦可提供 ::malloc。包含 <stdlib.h> 肯定会提供 ::malloc,亦可提供 std::malloc。这甚至适用于并非 C 标准库一部分的函数和函数重载。

<assert.h> (弃用) 表现如同每个来自 <cassert> 的名字被放入全局命名空间
<ctype.h> (弃用) 表现如同每个来自 <cctype> 的名字被放入全局命名空间
<errno.h> (弃用) 表现如同每个来自 <cerrno> 的名字被放入全局命名空间
<fenv.h> (弃用) 表现如同每个来自 <cfenv> 的名字被放入全局命名空间
<float.h> (弃用) 表现如同每个来自 <cfloat> 的名字被放入全局命名空间
<inttypes.h> (弃用) 表现如同每个来自 <cinttypes> 的名字被放入全局命名空间
<limits.h> (弃用) 表现如同每个来自 <climits> 的名字被放入全局命名空间
<locale.h> (弃用) 表现如同每个来自 <clocale> 的名字被放入全局命名空间
<math.h> (弃用) 表现如同每个来自 <cmath> 的名字被放入全局命名空间,
除了数学特殊函数的名字
<setjmp.h> (弃用) 表现如同每个来自 <csetjmp> 的名字被放入全局命名空间
<signal.h> (弃用) 表现如同每个来自 <csignal> 的名字被放入全局命名空间
<stdarg.h> (弃用) 表现如同每个来自 <cstdarg> 的名字被放入全局命名空间
<stddef.h> (弃用) 表现如同每个来自 <cstddef> 的名字被放入全局命名空间,
除了 std::byte 及其相关函数的名字
<stdint.h> (弃用) 表现如同每个来自 <cstdint> 的名字被放入全局命名空间
<stdio.h> (弃用) 表现如同每个来自 <cstdio> 的名字被放入全局命名空间
<stdlib.h> (弃用) 表现如同每个来自 <cstdlib> 的名字被放入全局命名空间
<string.h> (弃用) 表现如同每个来自 <cstring> 的名字被放入全局命名空间
<time.h> (弃用) 表现如同每个来自 <ctime> 的名字被放入全局命名空间
<uchar.h> (弃用) 表现如同每个来自 <cuchar> 的名字被放入全局命名空间
<wchar.h> (弃用) 表现如同每个来自 <cwchar> 的名字被放入全局命名空间
<wctype.h> (弃用) 表现如同每个来自 <cwctype> 的名字被放入全局命名空间

空 C 头文件

头文件 <complex.h><ccomplex><tgmath.h><ctgmath> 不含有任何来自 C 标准库的内容,而且不过是包含其他来自 C++ 标准库的头文件。C++ 中这些头文件的使用均已被弃用。

<ccomplex> (C++11 起)(C++17 中弃用)(C++20 中移除) 简单地包含 <complex>
<complex.h> (弃用) 简单地包含头文件 <complex>
<ctgmath> (C++11 起)(C++17 中弃用)(C++20 中移除) 简单地包含 <complex><cmath> :等价于 C 头文件 tgmath.h 内容的重载已经在这些头文件中提供
<tgmath.h> (弃用) 简单地包含头文件 <complex><cmath>

无意义的 C 头文件

头文件 <ciso646><cstdalign><cstdbool> 在 C++ 中无意义,因为它们在 C 中提供的宏是 C++ 的关键词。

<ciso646> (C++20 中移除) 空头文件。C 中出现于 iso646.h 的宏是 C++ 的关键词
<iso646.h> (弃用) 无效果
<cstdalign> (C++11 起)(C++17 中弃用)(C++20 中移除) 定义一个兼容性宏常量
<stdalign.h> (弃用) 定义一个兼容性宏常量
<cstdbool> (C++11 起)(C++17 中弃用)(C++20 中移除) 定义一个兼容性宏常量
<stdbool.h> (弃用) 定义一个兼容性宏常量

不受支持的 C 头文件

C++ 不包含 C 头文件 <stdatomic.h><stdnoreturn.h><threads.h> 而且它们无 cxxx 等价版本。

实验性库

C++ TR/TS 亦定义数个头文件的汇集。

参阅