Korzystanie z nagłówków biblioteki C++
Zawartość standardowego nagłówka należy uwzględnić, nazywając ją dyrektywą include.
#include <iostream>// include I/O facilities
Nagłówki standardowe można uwzględnić w dowolnej kolejności, nagłówek standardowy więcej niż raz lub dwa lub więcej standardowych nagłówków, które definiują to samo makro lub ten sam typ. Nie dołączaj standardowego nagłówka w deklaracji. Nie należy definiować makr, które mają takie same nazwy jak słowa kluczowe przed dołączeniem nagłówka standardowego.
Nagłówek biblioteki języka C++ zawiera wszelkie inne nagłówki biblioteki języka C++, które muszą definiować potrzebne typy. (Zawsze dołączaj jawnie wszystkie nagłówki biblioteki języka C++ potrzebne w jednostce tłumaczenia, jednak nie można odgadnąć błędu co do jego rzeczywistych zależności). Nagłówek standardowego języka C nigdy nie zawiera innego standardowego nagłówka. Nagłówek standardowy deklaruje lub definiuje tylko jednostki opisane dla niego w tym dokumencie.
Każda funkcja w bibliotece jest zadeklarowana w nagłówku standardowym. W przeciwieństwie do standardowego języka C nagłówek standardowy nigdy nie udostępnia makra maskowania o takiej samej nazwie jak funkcja, która maskuje deklarację funkcji i osiąga ten sam efekt. Aby uzyskać więcej informacji na temat maskowania makr, zobacz Konwencje bibliotek języka C++.
Wszystkie nazwy inne niż operator delete
i operator new
w nagłówkach biblioteki języka C++ są zdefiniowane w std
przestrzeni nazw lub w przestrzeni nazw zagnieżdżonej std
w przestrzeni nazw. Nazwa , na przykład , jest nazywana cin
.std::cin
Należy jednak pamiętać, że nazwy makr nie podlegają kwalifikacjom przestrzeni nazw, dlatego zawsze można pisać __STD_COMPLEX
bez kwalifikatora przestrzeni nazw.
W niektórych środowiskach tłumaczenia, w tym nagłówek biblioteki języka C++, może również wciągnąć nazwy zewnętrzne zadeklarowane w std
przestrzeni nazw do globalnej przestrzeni nazw, z poszczególnymi using
deklaracjami dla każdej z nazw. W przeciwnym razie nagłówek nie wprowadza żadnych nazw bibliotek do bieżącej przestrzeni nazw.
Język C++ Standard wymaga, aby nagłówki języka C Standard zadeklarowały wszystkie nazwy zewnętrzne w przestrzeni nazw, a następnie wciągnąć je do globalnej przestrzeni std
nazw z poszczególnymi using
deklaracjami dla każdej z nazw. Jednak w niektórych środowiskach tłumaczenia nagłówki języka C Standard nie zawierają deklaracji przestrzeni nazw, deklarując wszystkie nazwy bezpośrednio w globalnej przestrzeni nazw. W związku z tym najbardziej przenośnym sposobem radzenia sobie z przestrzeniami nazw jest przestrzeganie dwóch reguł:
Aby z pewnością zadeklarować w przestrzeni nazw
std
nazwę zewnętrzną, która jest tradycyjnie zadeklarowana w<stdlib.h>
pliku , dołącz nagłówek<cstdlib>
. Pamiętaj, że nazwa może być również zadeklarowana w globalnej przestrzeni nazw.Aby bezpiecznie zadeklarować w globalnej przestrzeni nazw nazwę zewnętrzną zadeklarowaną w
<stdlib.h>
pliku , dołącz nagłówek<stdlib.h>
bezpośrednio. Pamiętaj, że nazwa może być również zadeklarowana w przestrzeni nazwstd
.
W związku z tym, jeśli chcesz wywołać metodę std::abort
, aby spowodować nieprawidłowe zakończenie, należy uwzględnić wartość <cstdlib>
. Jeśli chcesz wywołać metodę abort
, dołącz wartość <stdlib.h>
.
Alternatywnie możesz napisać deklarację:
using namespace std;
która przenosi wszystkie nazwy biblioteki do bieżącej przestrzeni nazw. Jeśli napiszesz tę deklarację natychmiast po wszystkich dyrektywach dołączania, należy wciągnąć nazwy do globalnej przestrzeni nazw. Następnie można zignorować zagadnienia dotyczące przestrzeni nazw w pozostałej części jednostki tłumaczenia. Unikasz również większości różnic w różnych środowiskach tłumaczenia.
O ile nie określono inaczej, nie można definiować nazw w std
przestrzeni nazw lub w przestrzeni nazw zagnieżdżonej std
w przestrzeni nazw w ramach programu.
Zobacz też
Standardowa biblioteka C++ — przegląd
Bezpieczeństwo wątku w standardowej bibliotece C++