Заголовки стандартной библиотеки C ++ могут включать друг друга неопределенным образом, поэтому программисты обычно не должны зависеть от одного заголовка, включая другой. Однако в некоторых случаях заголовок гарантированно включает в себя другой заголовок или делает доступными определенные функции, которые в противном случае потребовали бы включения другого заголовка. Каковы эти случаи?
Этот ответ игнорирует заголовки 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
С ++ 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]).