Condividi tramite


Spazi dei nomi (C++)

Il linguaggio C++ fornisce un singolo spazio dei nomi globale. Ciò può comportare problemi di conflittualità tra nomi globali. 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; le classi String collideranno.

Uno spazio dei nomi è un'area dichiarativa che associa un identificatore aggiuntivo a tutti i nomi dichiarati al suo interno. L'identificatore aggiuntivo riduce la probabilità che un nome sia in conflitto con i nomi dichiarati in altre parti del programma. È possibile utilizzare lo stesso nome in spazi dei nomi distinti senza conflitti anche se i nomi vengono visualizzati nella stessa unità di conversione. Finché vengono visualizzati in spazi dei nomi distinti, ogni nome sarà univoco a causa dell'aggiunta dell'identificatore dello spazio dei nomi. Ad esempio:

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

A questo punto i nomi di classe non andranno in conflitto in quanto diventeranno one::String, e SomeLib::String.

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 nello scope file di un'unità di traslazione, all'esterno di tutti gli spazi dei nomi, sono ancora membri dello spazio dei nomi globale.

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedere anche

Riferimenti

Dichiarazioni