c ++ 11 — Какие заголовки в стандартной библиотеке C ++ гарантированно включают другой заголовок?

Заголовки стандартной библиотеки C ++ могут включать друг друга неопределенным образом, поэтому программисты обычно не должны зависеть от одного заголовка, включая другой. Однако в некоторых случаях заголовок гарантированно включает в себя другой заголовок или делает доступными определенные функции, которые в противном случае потребовали бы включения другого заголовка. Каковы эти случаи?

33

Решение

Этот ответ игнорирует заголовки 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С ++ 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]).

35

Другие решения