我正在参加一个在线编码竞赛,我的想法是找到一个名称比<iostream>
但包括<iostream>
。好吧,直到现在我还没有成功,但这让我想知道:
标准是否指定哪些标头包含其他标头?
例如,关于<iostream>
cplusplus http://www.cplusplus.com/reference/iostream/ states:
包含此标头可能会自动包含其他标头,例如<ios>
, <streambuf>
, <istream>
, <ostream>
and/or <iosfwd>
.
然而,当我寻找<ios>
不存在“此标头可能包含在<iostream>
“。对于某些标头,我可以想象它们需要包含其他标头才能正常工作。如果是这种情况,我希望标准能够做出一些标头如何相互依赖的声明(例如,必须避免循环依赖)或者标准只是确保这种依赖关系不存在并且取决于实现?
关于哪些标头可以被其他标头包含的一般规则是:有一些标头被指定自动包含,除此之外,它取决于实现并且不需要记录。
17.6.5.1 一致的实现[一致]
17.6.5.2 标头 [res.on.headers]
1 C++ 头文件可以包含其他 C++ 头文件。 C++ 头文件应提供其概要中出现的声明和定义。概要中显示的包含其他 C++ 头文件的 C++ 头文件应提供出现在这些其他头文件概要中的声明和定义。
关于“在其概要中显示为包含其他 C++ 头文件”的规则适用于:
-
<utility>
, <string>
, <array>
, <deque>
, <forward_list>
, <list>
, <vector>
, <map>
, <set>
, <unordered_map>
, <unordered_set>
, <queue>
, <stack>
, <algorithm>
, <random>
, <valarray>
, <regex>
包括<initializer_list>
.
-
<bitset>
包括<string>
, <iosfwd>
.
-
<iostream>
包括<ios>
, <streambuf>
, <istream>
, <ostream>
.
-
<ios>
包括<iosfwd>
.
然而,尽管例如<ios>
显示为包括<iosfwd>
,实现可能能够实现要求,而无需实际包含它,并且根据 [res.on.headers],这很好。在大多数情况下,只要声明的函数和类型可访问,实现是否包含其他标头都没有任何区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)