Имя, которое начинается с оператора разрешения области действия (::
), ищется в глобальном пространстве имен. Мы можем убедиться в этом, взглянув на черновик стандарта C ++ раздел 3.4.3
поиск квалифицированного имени параграф 4 , в котором написано ( выделение мое ) :
Имя с префиксом унарного оператора области :: (5.1) ищется в глобальной области , в единице перевода, где оно используется. Имя должно быть объявлено в глобальной области имен или должно быть именем, объявление которого видно в глобальной области действия из-за директивы using (3.4.3.2). Использование :: позволяет ссылаться на глобальное имя, даже если его идентификатор был скрыт (3.3.10).
Как гласит стандарт, это позволяет нам использовать имена из глобального пространства имен , которые в противном случае были бы скрыты , пример из связанного документа выглядит следующим образом:
int count = 0;
int main(void) {
int count = 0;
::count = 1; // set global count to 1
count = 2; // set local count to 2
return 0;
}
Формулировка очень похожа на N1804 , который является самым ранним доступным проектом стандарта.