Оператор разрешения области видимости (::)
Оператор разрешения области видимости (::) задает область видимости, которой принадлежит член и имеет следующую форму записи:
имя::имя_члена
Здесь имя задает имя класса или пространства имен, в котором содержится член, заданный элементом имя_члена. Другими словами, имя определяет область видимости, внутри которой может находиться идентификатор, заданный элементом имя_члена.
При ссылке на глобальную область видимости элемент имя задавать не нужно. Например, для обращения к глобальной переменной a, которая "скрыта" за локальной переменной с таким же именем a, нужно использовать оператор :: следующим образом: ::a

Пространства имен
В языке С++ можно создать локальную область видимости, используя ключевое слово namespace. Пространство имен определяет некоторую декларативную область. Ее назначение - ограничить действие имен. Общая форма задания пространства имен такова:

namespace <имя_пространства_имен> {
//.....
}

Пример 1
создается пространство имен MyNameSpace, а внутри него объявляется переменная count

namespace MyNameSpace {
int count;
}

На имена, объявленные в пространстве имен, могут напрямую ссылаться другие инструкции внутри того же пространства имен. Вне своего пространства имен к именам можно получить доступ двумя путями. Во-первых, использовав оператор разрешения области видимости (::).

Пример 2
MyNameSpace::count = 10;
Во-вторых, можно использовать инструкцию using, которая привносит заданное имя или пространство имен в текущую область видимости.

Пример 3
using namespace MyNameSpace;
count = 100;
// В данном случае к переменной можно обращаться напрямую, т.к. теперь она относится к текущей области видимости.
При появлении языка С++ элементы, объявленные в библиотеке С++, относились к глобальному (т.е. безымянному) пространству имен. Однако ныне действующий стандарт С++ все эти элементы относит к пространству имен std.