C++;标准库是否保证包含另一个标题? < > C++标准库头可能以不同的方式相互包含,因此程序员一般不应该依赖一个头,包括另一个头。然而,在少数情况下,保证一个头包含另一个头,或提供某些功能,否则需要包含另一个头。这些情况是什么?
此答案忽略了C标题-包括C++;标准库是否保证包含另一个标题? < > C++标准库头可能以不同的方式相互包含,因此程序员一般不应该依赖一个头,包括另一个头。然而,在少数情况下,保证一个头包含另一个头,或提供某些功能,否则需要包含另一个头。这些情况是什么?,c++,c++11,c++14,header-files,c++20,C++,C++11,C++14,Header Files,C++20,此答案忽略了C标题-包括和标题。C++库标题(所有引用都是N465): 保证包含在以下内容中: (§23.2.1) (§24.3.1) ) (§26.3.3) (§26.3.4) (§26.3.5) (§26.3.6) (§26.4.2) (§26.4.3) (§26.5.2) (§26.5.3) (§26.6.2) (§26.6.3) ) (§29.6.2) (§29.7.1) (§31.4) 保证包括、、和(§30.4.1) 保证包括(§30.5.1) 保证包括和(§23.9.1) 自由
和
标题。C++库标题(所有引用都是N465):
保证包含在以下内容中:
(§23.2.1)
(§24.3.1))
(§26.3.3)
(§26.3.4)
(§26.3.5)
(§26.3.6)
(§26.4.2)
(§26.4.3)
(§26.5.2)
(§26.5.3)
(§26.6.2)
(§26.6.3))
(§29.6.2)
(§29.7.1)
(§31.4)
保证包括
、
、
和
(§30.4.1)
保证包括
(§30.5.1)
保证包括
和
(§23.9.1)
自由函数模板std::begin
,std::end
,C++14C-
,r-
和cr-
版本,以及C++17自由函数模板std::size
,std::empty
和std::data
名义上位于
中,但如果包含以下任何标题,也可以使用:,§27.8)
如果包含
,则*begin
和*end
函数以及(swap(T&,T&)
和swap(T(&a)[N],T(&b)[N])
中定义的两个通用std::swap
重载保证可用<但是,代码>大小/空/数据
,不是。(§24.4.1)。以下是C++20的强制包含,摘自
比较包括在:
- 排列
- 计时
- 协同程序
- 德克
- 文件系统
- 转发列表
- 迭代器
- 名单
- 地图
- 记忆
- 可选的
- 排队
- 范围
- 正则表达式
- 设置
- 堆叠
- 串
- 字符串视图
- 系统错误
- 线
- 元组
- 类型索引
- 无序地图
- 无序集
- 效用
- 变体
- 载体
- 算法
- 排列
- 德克
- 转发列表
- 名单
- 地图
- 排队
- 随机的
- 范围
- 正则表达式
- 设置
- 堆叠
- 串
- 线
- 无序地图
- 无序集
- 效用
- valarray
- 载体
- 位集
- 位集
- ios
- 迭代器
- 范围
- 流
- 流
- 同步流
- 力
std::cbegin
等。大部分信息都在各自标题的概要中。为什么这些信息有用?@Pradhan知道这一点很有用,例如,如果您包含
,则不必包含
,或者
如果您只需要std::begin
/std::end
@T.C.但是不明确指定声明您使用的类型的头文件是个坏主意。这将使代码更难阅读,即使它可以使编译速度加快一点。开发者不应该知道保证包含的内容。好的,对于std::begin的情况,这是显而易见的,但是对于其他情况,它可能不是。请包括您一直使用的内容。即使只需要30秒就可以向同事解释你为什么这么做,但不这么做只会带来负面影响。你花在解释上的时间比做正确的事情要多。