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

T.C*_*.C. 35 c++ header-files c++11 c++14 c++17

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

T.C*_*.C. 36

这个答案忽略了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::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 [iterator.range],§27.8 [iterator.container] ).

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