C++标准库中的哪些标头保证包含另一个标头
Which headers in the C++ standard library are guaranteed to include another header?
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::begin
、std::end
、C++14 c-
、r-
和 cr-
版本,以及 C++17 个自由函数模板std::size
、std::empty
和 std::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包含在:
- 科斯丁特
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 创建一个 const std::vector ,其中包含另一个 const std::vector 和其他值
- 如何为包含另一个类实例的数组制作常量 getter?
- 使用按位运算确定值是否包含另一个值
- 如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?
- 如何查找哪个标头在包含树中包含另一个标头
- 包含另一个实例的特征实例,该实例持有固定大小的特征对象
- 包含另一个对象的对象,然后将其传递给它(C )
- C++初始化包含另一个对象设计问题的对象
- 程序检查是否包含另一个数字
- 包含另一个对象指针向量的对象
- 当动态创建一个包含另一个动态创建的结构数组的结构数组时,内存管理
- BITWISE-如何检查二进制号是否包含另一个数字
- 包含另一个关键部分的关键部分
- 向量emplace_back包含另一个向量(部分向量)的用法(C++11)
- 在我的 qmake 项目中包含另一个项目的 qmake 文件
- 分配包含另一个结构数组的结构数组时出错
- 检查一个文档是否包含另一个c++的内容
- 检查map<string,string>是否包含另一个map<string,string>
- 将包含另一个向量的结构向量写入二进制文件