Nepojmenované obory názvů
Nepojmenované obory názvů lze deklarovat jako výhodnější alternativu k deklaracím globálních statických proměnných.
namespace { declaration-list }
Poznámky
Definice nepojmenovaného oboru názvů se syntaxí výše se chová, jako by byla nahrazena kódem
namespace unique { declaration-list }
using namespace unique;
Každý nepojmenovaný obor názvů má identifikátor přiřazený a udržovaný programem, zde reprezentovaný symbolem unique, který se liší od všech identifikátorů v celém programu.Příklad:
// 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++
}
Nepojmenované obory názvů jsou výhodnější náhražkou statických deklarací proměnných.Umožňují proměnným a funkcím být viditelné v rámci celé jednotky překladu, nikoli však mimo ni.Ačkoli entity v nepojmenovaném oboru názvů mohou mít vnější propojení, jsou efektivně kvalifikovány názvem jedinečným pro jejich jednotku překladu, proto z žádné jiné jednotky nemohou být viděny.