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

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

2 ответа

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

Вот обязательные включения для C++20, взятые из N4860.

сравнение включено в:

  • множество
  • хроно
  • сопрограмма
  • дека
  • файловая система
  • список_вперед
  • итератор
  • список
  • карта
  • Память
  • по желанию
  • очередь
  • диапазоны
  • регулярное выражение
  • установлен
  • куча
  • нить
  • string_view
  • системная ошибка
  • нить
  • кортеж
  • указатель типа
  • unordered_map
  • unordered_set
  • полезность
  • вариант
  • вектор

initializer_list включен в:

  • алгоритм
  • множество
  • дека
  • список_вперед
  • список
  • карта
  • очередь
  • случайный
  • диапазоны
  • регулярное выражение
  • установлен
  • куча
  • нить
  • нить
  • unordered_map
  • unordered_set
  • полезность
  • валаррей
  • вектор

строка включена в:

  • набор битов

iosfwd входит в состав:

  • набор битов
  • iOS

понятия входят в состав:

  • итератор

итератор включен в:

  • диапазоны

ios, streambuf, istream включены в:

  • iostream

ostream входит в состав:

  • iostream
  • синхронизация

cinttypes входит в состав:

  • cstdint
Другие вопросы по тегам