Подтвердить что ты не робот

Какая цель ведущего "::" в вызове метода С++

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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