Члены анонимного пространства имен (также называемого безымянным пространством имен) занимают глобальную область видимости и доступны во всех областях, следующих за объявлением в файле. Мы можем получить к ним доступ без какой-либо квалификации.
Если вы рассматриваете следующую программу:
#include <iostream>
// named namespace
namespace A {
// unnamed namespace
namespace {
int a;
}
}
int main(void) {
// initializing an unnamed namespace member
// you need to use `::` because that unnamed namespace
// is containing in a named namespace `A`
A::a = 10;
// calling the unnamed namespace member
std::cout << A::a << std::endl;
return 0;
}
Вам необходимо использовать квалификатор ::
, т.е. A::a
, если вы определяете безымянное пространство имен, вам больше не потребуется использовать квалификацию, указанную в примере:
// unnamed namespace
namespace {
int a;
}
int main(void) {
// simply accessed
a = 10;
}