Учитывая следующее:
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
?
От 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::
,
Это позволяет использовать Bar
без Foo
Пространство имен.