在using语句中指定类名是什么做的?

Jon*_*Mee 0 c++ scope named-scope using class

鉴于以下内容:

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; }
};
}
Run Code Online (Sandbox Code Playgroud)

该声明using Foo::Bar;编译......但我不确定它是什么让我访问.任何人都可以解释一下这个陈述的重点是什么以及它能让我获得什么,Bar而不仅仅是做一个using namespace Bar

Ane*_*dar 5

cppreference:

使用ns_name::name; (6)
(...)
6)using-declaration:使name命名空间中的符号可以被ns_name访问,以便进行非限定查找,就像在同一类范围,块范围或命名空间中声明这个using-declaration出现一样.

使用命名空间ns_name; (5)
5)using-directive:从使用指令之后的任何名称的非限定名称查找的角度来看,直到它出现的作用域的结尾,来自namespace-name的每个名称都可见,就好像它是在最近的封闭命名空间中声明,该命名空间包含using-directive和namespace-name.

所以基本上你可以编写Bar而不是Foo::Bar在命名空间之外Foo(但在using-declaration的范围内),而命名空间中的其他符号Foo仍然需要全名.

如果您使用,using namespace Foo您可以Foo通过其本地名称访问所有符号而无需显式Foo::.