38

C++ 标准库头文件可能以未指定的方式相互包含,因此程序员通常不应该依赖一个头文件包括另一个头文件。但是,在少数情况下,可以保证一个标头包含另一个标头,或者使某些功能可用,否则这些功能需要包含另一个标头。那些案例是什么?

4

2 回答 2

38

这个答案忽略了 C 头文件 -<meow.h><cmeow>那些。C++ 库头文件(所有引用均指向 N4659):

<initializer_list>保证包含在:

<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::size,名义上驻留在 中,但如果包含以下任何标头,也可以使用:、、、、、、, , ,和(§27.7 [iterator.range] , §27.8 [iterator.container] )。std::emptystd::data<iterator><array><deque><forward_list><list><map><regex><set><string><unordered_map><unordered_set><vector>

<string_view>包含时,*beginand函数和定义在[utility.swap] ( and ) 中*end的两个泛型std::swap重载保证可用。,然而,不是。(§24.4.1 [string.view.synop])。swap(T&, T&)swap(T (&a)[N], T (&b)[N])size/empty/data

于 2014-10-28T17:43:25.117 回答
0

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

比较包含在:

  • 大批
  • 计时码表
  • 协程
  • 双端队列
  • 文件系统
  • forward_list
  • 迭代器
  • 列表
  • 地图
  • 记忆
  • 可选的
  • 队列
  • 范围
  • 正则表达式
  • 细绳
  • 字符串视图
  • 系统错误
  • 线
  • 元组
  • 类型索引
  • 无序映射
  • 无序集
  • 效用
  • 变体
  • 向量

initializer_list 包含在:

  • 算法
  • 大批
  • 双端队列
  • forward_list
  • 列表
  • 地图
  • 队列
  • 随机的
  • 范围
  • 正则表达式
  • 细绳
  • 线
  • 无序映射
  • 无序集
  • 效用
  • valarray
  • 向量

字符串包含在:

  • 位集

iosfwd 包含在:

  • 位集
  • IOS

概念包含在:

  • 迭代器

迭代器包含在:

  • 范围

ios、streambuf、istream 包含在:

  • iostream

ostream 包含在:

  • iostream
  • 同步流

cinttypes 包含在:

  • cstdint
于 2021-01-30T17:49:18.220 回答