Что делает указание имени класса в операторе using?

Учитывая следующее:

namespace Foo{
class Bar{
static const auto PRIVATE = 0;
const int private_ = 1;
void ptivateFunc() { cout << 2; }
public:
static const auto PUBLIC = 3;
const int public_ = 4;
void publicFunc() { cout << 5; }
};
}

Заявление using Foo::Bar; компилирует … Но я не уверен, что это дает мне доступ. Может ли кто-нибудь объяснить, в чем смысл этого заявления и к чему оно даст мне доступ в отношении Bar по сравнению с просто делать using namespace Bar?

0

Решение

От cppreference:

с помощью ns_name::name; (6)
(…)
6) использование-объявление: делает символ name из пространства имен ns_name доступен для неквалифицированного поиска, как если бы он был объявлен в той же области видимости класса, области блока или пространстве имен, что и там, где появляется это объявление using.

используя пространство имен ns_name; (5)
5) директива using: с точки зрения поиска безусловного имени любого имени после директивы using и до конца области, в которой оно появляется, каждое имя из namespace-name виден так, как если бы он был объявлен в ближайшем окружающем пространстве имен, которое содержит директиву using и namespace-name.

Так что в принципе вы можете написать Bar вместо Foo::Bar за пределами пространства имен Foo (но внутри области использования-объявления), в то время как другие символы из пространства имен Foo все еще нужно полное имя.

Если вы используете using namespace Foo Вы можете получить доступ ко всем символам в Foo по их местному названию без явного Foo::,

5

Другие решения

Это позволяет использовать Bar без Foo Пространство имен.

1

По вопросам рекламы [email protected]