lenguaje - ¿Qué encabezados en la biblioteca estándar de C++ tienen garantizado incluir otro encabezado?
incluir un archivo c en otro (1)
Esta respuesta ignora los encabezados C, tanto los <meow.h>
como <cmeow>
. De los encabezados de biblioteca C ++ (todas las referencias son a N4659):
<initializer_list>
está garantizado para ser incluido por:
-
<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>
unordered_map<unordered_map>
(§26.5.2 [unord.map.syn] ) -
<unordered_set>
unordered_set<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>
garantiza incluir <ios>
, <streambuf>
, <istream>
y <ostream>
(§30.4.1 [iostream.syn] ).
<ios>
está garantizado para incluir <iosfwd>
(§30.5.1 [ios.syn] ).
<bitset>
garantiza incluir <string>
y <iosfwd>
(§23.9.1 [bitset.syn] ).
Las plantillas de funciones gratuitas std::begin
, std::end
, las versiones de C ++ 14 c-
, r-
y cr-
y las plantillas de funciones libres de C ++ 17 std::size
, std::empty
y std::data
residen nominalmente en <iterator>
, pero también están disponibles si se incluye alguno de los siguientes encabezados: <array>
, <deque>
, <forward_list>
, <list>
, <map>
, <regex>
, <set>
, <string>
, <unordered_map>
, <unordered_set>
, y <vector>
(§27.7 [iterator.range] iterator.range [iterator.range] , §27.8 [iterator.container] iterator.container [iterator.container] ).
Cuando se incluye <string_view>
, las funciones *begin
y *end
, y las dos sobrecargas std::swap
genéricas definidas en [utility.swap] ( swap(T&, T&)
y swap(T (&a)[N], T (&b)[N])
) están garantizados para estar disponibles. size/empty/data
, sin embargo, no lo son. (§24.4.1 [string.view.synop] ).
Los encabezados de biblioteca estándar de C ++ pueden incluirse entre sí de formas no especificadas, por lo que los programadores generalmente no deberían depender de un encabezado que incluya otro. Sin embargo, en algunos casos, se garantiza que un encabezado incluya otro encabezado, o ponga a disposición ciertas funciones que de otro modo requerirían la inclusión de otro encabezado. ¿Cuáles son esos casos?