Uso delle intestazioni della libreria C++)
È possibile includere il contenuto di un'intestazione standard denominandola in una direttiva include.
#include <iostream>// include I/O facilities
Le intestazioni standard possono essere incluse in qualsiasi ordine e più di una volta. È inoltre possibile includere due o più intestazioni standard che definiscono la stessa macro o lo stesso tipo. Non includere un'intestazione standard all'interno di una dichiarazione. Non definire macro con gli stessi nomi delle parole chiave prima di includere un'intestazione standard.
Un'intestazione della libreria C++ include qualsiasi altra intestazione della libreria C++ necessaria per definire i tipi desiderati. Includere sempre in modo esplicito le intestazioni di libreria C++ necessarie in un'unità di conversione, tuttavia, per esegirne erroneamente le dipendenze effettive. Un'intestazione C standard non include mai un'altra intestazione standard. Un'intestazione standard dichiara o definisce solo le entità descritte per essa in questo documento.
Ogni funzione nella libreria è dichiarata in un'intestazione standard. Diversamente dalle intestazioni C standard, le intestazioni standard non forniscono mai una macro di mascheramento con lo stesso nome della funzione che maschera la dichiarazione della funzione e produce lo stesso effetto. Per altre informazioni sulle macro di mascheramento, vedere C++ Library Conventions (Convenzioni della libreria C++).
Tutti i nomi diversi da operator delete
e operator new
nelle intestazioni della libreria C++ sono definiti nello spazio dei nomi std
o in uno spazio dei nomi annidato nello spazio dei nomi std
. Per fare riferimento al nome cin
, ad esempio, utilizzare std::cin
. Si noti, tuttavia, che i nomi delle macro non sono soggetti alla qualifica dello spazio dei nomi, quindi si scrive __STD_COMPLEX
sempre senza un qualificatore dello spazio dei nomi.
In alcuni ambienti di conversione, se si include un'intestazione della libreria C++, è possibile che venga eseguito il lift dei nomi esterni dichiarati nello spazio dei nomi std
anche nello spazio dei nomi globale, con singole dichiarazioni using
per ognuno dei nomi. In caso contrario, l'intestazione non introduce nomi di libreria nello spazio dei nomi corrente.
Il linguaggio standard C++ richiede che le intestazioni standard C dichiarino tutti i nomi esterni nello spazio dei nomi std
, quindi ne esegue il lift nello spazio dei nomi globale con singole dichiarazioni using
per ognuno dei nomi. In alcuni ambienti di conversione tuttavia le intestazioni C standard non includono dichiarazioni dello spazio dei nomi e tutti i nomi vengono dichiarati direttamente nello spazio dei nomi globale. Pertanto, il modo migliore per gestire gli spazi dei nomi consiste nel seguire due regole:
Per dichiarare in modo sicuro nello spazio dei nomi
std
un nome esterno tradizionalmente dichiarato in<stdlib.h>
, ad esempio, includere l'intestazione<cstdlib>
. Considerare che il nome potrebbe essere dichiarato anche nello spazio dei nomi globale.Per dichiarare in modo sicuro nello spazio dei nomi globale un nome esterno dichiarato in
<stdlib.h>
, includere direttamente l'intestazione<stdlib.h>
. Considerare che il nome potrebbe essere dichiarato anche nello spazio dei nomistd
.
Pertanto, se si desidera chiamare std::abort
per causare la terminazione anomala, è necessario includere <cstdlib>
. Se si desidera chiamare abort
, è necessario includere <stdlib.h>
.
In alternativa, è possibile scrivere la dichiarazione seguente:
using namespace std;
che trasporta tutti i nomi di libreria nello spazio dei nomi corrente. Se si scrive questa dichiarazione immediatamente dopo tutte le istruzioni include, si esegue il lift dei nomi nello spazio dei nomi globale. È possibile successivamente ignorare le considerazioni sugli spazi dei nomi nel resto dell'unità di conversione ed evitare la maggior parte delle differenze tra i diversi ambienti di conversione.
A meno che non venga espressamente indicato altrimenti, è possibile non definire i nomi nello spazio dei nomi std
o in uno spazio dei nomi annidato nello spazio dei nomi std
nel programma.
Vedi anche
Panoramica sulla libreria standard C++
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)