Какова цель лидирующего "::" в вызове метода C ++ - PullRequest
32 голосов
/ 13 января 2010

Я использовал библиотеки Boost, и в Boost.Exception я заметил следующий код:

#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)

Просто из любопытства: какова цель ведущих :: до boost::throw_exception(x)?

Ответы [ 2 ]

39 голосов
/ 13 января 2010

Для ссылки на корневое пространство имен. Это часто полезно, если ваш класс или ваше пространство имен используют имя, которое также существует в корне, но в какой-то момент вы хотите обратиться к корневой версии.

Например, если я перегрузил new в своем классе, но хотел бы в какой-то момент сослаться на значение по умолчанию (root) new, тогда я бы использовал ::new для ссылки на root new.

27 голосов
/ 13 января 2010

Чтобы указать, что это пространство имен верхнего уровня.

Это очень похоже (но не идентично) на то, как работает имя каталога. Без двоеточия в начале C ++ сначала проверит, существует ли пространство имен с этим именем в текущем «активном» пространстве имен. Если нет, он проверит пространство имен на верхнем уровне.

С начальным двойным двоеточием C ++ пропустит первую проверку и будет искать только пространство имен верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...