Spazi dei nomi senza nome
È possibile dichiarare uno spazio dei nomi senza nome come alternativa con priorità rispetto all'utilizzo di dichiarazioni di variabili statiche globali.
namespace { declaration-list }
Note
Una definizione di uno spazio dei nomi senza nome con la sintassi mostrata in precedenza si comporta come se fosse sostituita da:
namespace unique { declaration-list }
using namespace unique;
A ogni spazio dei nomi senza nome è associato un identificatore, assegnato e gestito dal programma e rappresentato qui da unique, diverso da tutti gli altri identificatori nell'intero programma. Ad esempio:
// unnamed_namespaces.cpp
// C2872 expected
namespace { int i; } // unique::i
void f() { i++; } // unique::i++
namespace A {
namespace {
int i; // A::unique::i
int j; // A::unique::j
}
}
using namespace A;
void h()
{
i++; // C2872: unique::i or A::unique::i
A::i++; // A::unique::i++
j++; // A::unique::j++
}
Gli spazi dei nomi senza nome rappresentano una sostituzione con priorità per la dichiarazione statica di variabili. Tali spazi consentono a variabili e funzioni di essere visibili all'interno di un'intera unità di conversione, ma di esserlo esternamente. Sebbene le entità in uno spazio dei nomi senza nome possano disporre di un collegamento esterno, sono effettivamente qualificate da un nome univoco nella relativa unità di conversione e pertanto non possono mai essere visibili in un'altra unità di conversione.