C++标准库中的哪些标头保证包含另一个标头

Which headers in the C++ standard library are guaranteed to include another header?

本文关键字:包含 另一个 标准 C++      更新时间:2023-10-16

C++标准库标头可能以未指定的方式相互包含,因此程序员通常不应依赖于一个标头包括另一个标头。但是,在少数情况下,可以保证标头包含另一个标头,或者提供某些需要包含另一个标头的函数。这些情况是什么?

这个答案忽略了 C 标头 - <meow.h><cmeow> 标头。在 C++ 库标头中(所有引用均指向 N4659(:

<initializer_list>保证包括:

  • <utility> (§23.2.1 [实用程序.syn](
  • <string> (§24.3.1 [字符串.syn](
  • <array> (§26.3.2 [array.syn](
  • <deque> (§26.3.3 [deque.syn](
  • <forward_list> (§26.3.4 [forward_list.syn](
  • <list> (§26.3.5 [列表.syn](
  • <vector> (§26.3.6 [vector.syn](
  • <map> (§26.4.2 [associaciative.map.syn](
  • <set> (§26.4.3 [associaciative.set.syn](
  • <unordered_map> (§26.5.2 [unord.map.syn](
  • <unordered_set> (§26.5.3 [unord.set.syn](
  • <queue> (§26.6.2 [队列.syn](
  • <stack> (§26.6.3 [堆栈同步](
  • <algorithm> (§28.2 [算法.syn](
  • <random> (§29.6.2 [兰德概要](
  • <valarray> (§29.7.1 [valarray.syn](
  • <regex> (§31.4 [re.syn](

<iostream>保证包括<ios><streambuf><istream><ostream>(§30.4.1 [iostream.syn](。

<ios>保证包含<iosfwd>(§30.5.1 [ios.syn](。

<bitset>保证包括<string><iosfwd>(§23.9.1 [bitset.syn](。

自由函数模板std::beginstd::end、C++14 c-r-cr- 版本,以及 C++17 个自由函数模板std::sizestd::emptystd::data名义上驻留在<iterator>中,但如果包含以下任何标头,也可以使用:<array><deque><forward_list><list><map><regex><set><string><unordered_map><unordered_set><vector>(§27.7 [迭代器.范围], §27.8 [迭代器.容器](。

当包含<string_view>时,*begin*end函数以及[utility.swap]中定义的两个通用std::swap重载(swap(T&, T&)swap(T (&a)[N], T (&b)[N])(保证可用。 size/empty/data ,但不是(§24.4.1 [string.view.synop](。

以下是 C++20 的强制性包含,取自 N4860。

比较包含在:

  • 数组
  • 计时
  • 协程
  • 德克
  • 文件系统
  • forward_list
  • 迭 代
  • 列表
  • 地图
  • 记忆
  • 自选
  • 队列
  • 范围
  • 正则表达式
  • 设置
  • 字符串
  • string_view
  • system_error
  • 线
  • 类型索引
  • unordered_map
  • unordered_set
  • 效用
  • 变体
  • 向量

initializer_list包含在:

  • 算法
  • 数组
  • 德克
  • forward_list
  • 列表
  • 地图
  • 队列
  • 随机
  • 范围
  • 正则表达式
  • 设置
  • 字符串
  • 线
  • unordered_map
  • unordered_set
  • 效用
  • 瓦拉雷
  • 向量

字符串包含在:

  • 位集

IOSFWD 包含在:

  • 位集
  • 爱欧斯

概念画板包含在:

  • 迭 代

迭代器包含在:

  • 范围

iOS,StreambuF,ISTREAM包含在:

  • 艾欧流

ostream 包含在:

  • 艾欧流
  • 同步流

Cinttypes包含在:

  • 科斯丁特