Что является целью продвижения “::” в вызове метода C++

Я пользовался библиотеками Boost, и в Повышении. Исключение, я заметил код как следующее:

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

Только из любопытства: какова цель продвижения :: прежде boost::throw_exception(x)?

34
задан Null 4 April 2016 в 21:03
поделиться

2 ответа

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

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

41
ответ дан 27 November 2019 в 16:36
поделиться

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

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

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

29
ответ дан 27 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: