Я пользовался библиотеками Boost, и в Повышении. Исключение, я заметил код как следующее:
#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x)
Только из любопытства: какова цель продвижения ::
прежде boost::throw_exception(x)
?
Для ссылки на корневое пространство имен. Это часто бывает полезно, если ваш класс или ваше пространство имен используют имя, которое также существует в корне, но в какой-то момент вы хотите обратиться к корневой версии.
Например, если я перегрузил new
в своем классе, но в какой-то момент захочу сослаться на значение по умолчанию (root) new
, то я бы использовал : : new
для ссылки на root new.
Чтобы указать, что это пространство имен верхнего уровня.
Это очень похоже (но не идентично) тому, как работает имя каталога. Без начального двойного двоеточия C ++ сначала проверит, существует ли пространство имен с таким именем в текущем «активном» пространстве имен. Если нет, он проверит пространство имен имени на верхнем уровне.
Если в начале стоит двойное двоеточие, C ++ пропустит первую проверку и будет искать только пространство имен верхнего уровня.