C++标准库 header 可能以未指定的方式相互包含,因此程序员通常不应依赖一个 header ,而应依赖另一个 header 。但是,在某些情况下,可以保证 header 包含另一个 header ,或保证某些功能需要提供,否则这些功能就需要包含另一个 header 。那是什么情况
最佳答案
此答案忽略C头-<meow.h>
和<cmeow>
头。在C++库 header 中(所有引用都对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
函数以及[utility.swap]中定义的两个通用std::swap
重载(swap(T&, T&)
和swap(T (&a)[N], T (&b)[N])
)可用。 size/empty/data
却不是。 (第24.4.1节[string.view.synop])。关于c++ - 确保C++标准库中的哪些 header 包含另一个 header ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26614983/