2014-10-28 11 views
31

Le intestazioni di libreria standard C++ possono includere l'un l'altro in modi non specificati, pertanto i programmatori in genere non dovrebbero dipendere da un'intestazione che include un'altra. In alcuni casi, tuttavia, un'intestazione è garantita per includere un'altra intestazione o per rendere disponibili alcune funzioni che altrimenti richiederebbero l'inclusione di un'altra intestazione. Quali sono quei casi?Quali intestazioni nella libreria standard C++ sono garantite per includere un'altra intestazione?

+3

Perché queste informazioni sono utili? – Pradhan

+4

@Pradhan È utile sapere, ad esempio, che se hai incluso '' non devi includere '', o '' se hai solo bisogno di 'std :: begin' /' std :: FINE'. –

+1

Ah, ha senso. Grazie! – Pradhan

risposta

32

Questa risposta ignora le intestazioni C - sia le <meow.h> sia le <cmeow>. Dei ++ intestazioni di libreria C (tutti i riferimenti sono a N4659):

<initializer_list> è garantito per essere incluso da:

<iostream> è garantito per includere <ios>, <streambuf>, <istream>, e <ostream> (§30.4.1 [iostream.syn]).

<ios> include <iosfwd> (§30.5.1 [ios.syn]).

<bitset> è garantito per includere <string> e <iosfwd> (§23.9.1 [bitset.syn]).

La funzione libera Modelli std::begin, std::end, i C++ 14 c-, r- e cr- versioni, e C++ 17 modelli funzionali liberi std::size, std::empty e std::data nominalmente risiedere in <iterator>, ma sono anche disponibili se qualsiasi delle seguenti intestazioni è incluso: <array>, <deque>, <forward_list>, <list>, <map>, <regex>, <set>, <string>, <unordered_map>, <unordered_set>, e <vector> (§27.7 [iterator.range], §27.8 [iterator.container]).

Quando <string_view> è incluso, i *begin e *end funzioni e le due generici std::swap sovraccarichi definiti [utility.swap] (swap(T&, T&) e swap(T (&a)[N], T (&b)[N])) sono garantiti per essere disponibile. size/empty/data, tuttavia, non lo sono. (§24.4.1 [string.view.synop]).

+0

@ShafikYaghmour L'unica differenza dopo aver confrontato N3337 e N4140 è la mancanza di 'std :: cbegin' ecc. In C++ 11. La maggior parte di questo è nella sinossi delle rispettive intestazioni. –

Problemi correlati