Namespaces sem nome
Você pode declarar um namespace sem nome como uma alternativa superior ao uso de declarações de variáveis globais estáticas.
namespace { declaration-list }
Comentários
Uma definição de namespace sem nome que tem a sintaxe mostrada acima se comportará como se fosse substituída por:
namespace unique { declaration-list }
using namespace unique;
Cada namespace sem nome tem um identificador, atribuído e mantido pelo programa e representado aqui por unique, que é diferente de todos identificadores restantes no programa inteiro. Por exemplo:
// 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++
}
Os namespaces sem nome é uma substituição superior da declaração estática de variáveis. Eles permitem que variáveis e funções sejam visíveis em uma unidade de conversão inteira, porém não visíveis externamente. Embora as entidades em um namespace sem nome possam ter vinculação externa, elas são qualificadas efetivamente por um nome exclusivo para a unidade de conversão e, portanto, nunca podem ser vistas de outra unidade de conversão.