Dichiarazione namespace
Una dichiarazione namespace identifica e assegna un nome univoco a uno spazio dei nomi dichiarato dall'utente.
namespace identifier
Note
Questi spazi dei nomi vengono utilizzati per risolvere il problema dei conflitti di nomi in programmi e librerie di grandi dimensioni. I programmatori possono utilizzare gli spazi dei nomi per sviluppare nuovi componenti software e librerie senza causare conflitti di denominazione con i componenti esistenti.
Di seguito è riportato un esempio.
// namespace_declaration1.cpp
namespace X
{
int i;
double j;
}
int main()
{
X::i++;
}
La sintassi per la definizione di uno spazio dei nomi è la seguente:
namespace identifier
{
[ declaration-list ]
}
Una namespace-definition può essere annidata all'interno di un'altra namespace-definition. Ogni namespace-definition deve comparire in ambito file o immediatamente all'interno di un'altra namespace-definition.
Di seguito è riportato un esempio.
// namespace_declaration2.cpp
// C2870 expected
namespace A
{
int j = 3;
int f(int k);
}
namespace Outer
{
int n = 6;
int func(int num);
namespace Inner
{
float f = 9.993;
}
}
int main()
{
namespace local // C2870: not at global scope
{
}
}
A differenza di altre aree dichiarative, la definizione di uno spazio dei nomi può essere suddivisa in diverse parti di una singola unità di conversione.
// namespace_declaration3.cpp
namespace A
{
// declare namespace A variables
int i;
int j;
}
namespace B
{
}
namespace A
{
// declare namespace A functions
void func(void);
int int_func(int i);
}
int main()
{
}
Quando uno spazio dei nomi viene continuato in questo modo, dopo la definizione iniziale, la continuazione viene denominata definizione dello spazio dei nomi di estensione. La definizione originale dello spazio dei nomi è nota come definizione dello spazio dei nomi originale.
L'utilizzo di questa notazione può essere complesso con nomi lunghi o in programmi di dimensione più grande. La dichiarazioneusing, la direttiva using e gli alias degli spazi dei nomi forniscono modalità più semplici per fare riferimento ai membri degli spazi dei nomi.
Una dichiarazione namespace, sia che interessi un nuovo spazio dei nomi, che uno spazio dei nomi senza nome oppure una definizione di spazio dei nomi estesa, deve essere accompagnata da un corpo dello spazio dei nomi racchiuso tra parentesi graffe. L'istruzione
namespace X;
è un errore di sintassi. L'istruzione
namespace X{};
non è un errore di sintassi, ma non ha alcun significato.
Per informazioni di base, vedere Spazi dei nomi.
L'identificatore in una definizione di spazio dei nomi originale deve essere univoco nell'area dichiarativa in cui viene utilizzato. L'identificatore è il nome dello spazio dei nomi e viene utilizzato per fare riferimento ai relativi membri.
L'area dichiarativa di una definizione di spazio dei nomi rappresenta il relativo corpo. Il corpo deve essere racchiuso tra parentesi graffe ({}) e può contenere dichiarazioni o definizioni di variabili, funzioni, oggetti, modelli e spazi dei nomi annidati. Le dichiarazioni contenute in declaration-list sono denominate membri dello spazio dei nomi. Il nome di ciascun membro dello spazio dei nomi viene automaticamente qualificato con il nome del relativo spazio dei nomi e l'operatore di risoluzione dell'ambito.