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> 保证包含在:
<utility>(§23.2.1 [utility.syn])<string>(§24.3.1 [string.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 [list.syn])<vector>(§26.3.6 [vector.syn])<map>(§26.4.2 [associative.map.syn])<set>(§26.4.3 [associative.set.syn])<unordered_map>(§26.5.2 [unord.map.syn])<unordered_set>(§26.5.3 [unord.set.syn])<queue>(§26.6.2 [queue.syn])<stack>(§26.6.3 [stack.syn])<algorithm>(§28.2 [algorithms.syn])<random>(§29.6.2 [rand.synopsis])<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 [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]).