Spazi dei nomi (C++)
Il linguaggio C++ fornisce un singolo spazio dei nomi globale.Ciò può comportare problemi con l'incompatibilità globali del nome.Ad esempio, considerare questi due file di intestazione C++:
char func(char);
class String { ... };
// somelib.h
class String { ... };
Con queste definizioni, è impossibile utilizzare entrambi i file di intestazione in un unico programma; String le classi è scontreranno.
Uno spazio dei nomi è un'area dichiarativa che associa un identificatore aggiuntivo a tutti i nomi dichiarati in.L'identificatore aggiuntivo fa meno probabile che un nome non in conflitto con i nomi dichiarati nel programma.È possibile utilizzare lo stesso nome negli spazi dei nomi distinti senza conflitti anche se i nomi vengono visualizzati nella stessa unità di conversione.Se vengono visualizzati negli spazi dei nomi distinti, ogni nome verrà univoco a causa di aggiunta dell'identificatore dello spazio dei nomi.Di seguito è riportato un esempio:
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
A questo punto i nomi di classe non è scontreranno perché diventano one::String e SomeLib::String, rispettivamente.
C++ non consente i nomi composti per gli spazi dei nomi.
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
Le dichiarazioni in file di un'unità di conversione, all'esterno di tutti gli spazi dei nomi, sono ancora membri dello spazio dei nomi globale.