C++ 在using语句中指定类名的作用是什么?

C++ 在using语句中指定类名的作用是什么?,c++,class,scope,using,named-scope,C++,Class,Scope,Using,Named Scope,鉴于以下情况: 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;

鉴于以下情况:

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; }
};
}
名称空间Foo{
分类栏{
静态常数自动私有=0;
const int private_u2;=1;

void ptivateFunc(){cout它允许您使用
Bar
而不使用
Foo
命名空间。

它允许您使用
Bar
而不使用
Foo
命名空间。

来自:

使用
ns_name::name
;(6)
(…)

6) 使用声明:使命名空间
ns\u name
中的符号
name
可用于非限定查找,如同在与此使用声明出现的位置相同的类作用域、块作用域或命名空间中声明一样

使用名称空间
ns_name
;(5)
5) using指令:从using指令之后任何名称的非限定名称查找的角度来看,直到它出现的范围结束,命名空间名称中的每个名称都是可见的,就像它是在最近的封闭命名空间中声明的一样,该命名空间包含using指令和命名空间名称

因此,基本上您可以在命名空间
Foo
之外(但在using声明的范围内)编写
Bar
而不是
Foo::Bar
,而命名空间
Foo
中的其他符号仍然需要全名

如果使用
使用名称空间Foo
,则可以通过其本地名称访问
Foo
中的所有符号,而无需显式的
Foo::

来自:

使用
ns_name::name
;(6)
(…)

6) 使用声明:使命名空间
ns\u name
中的符号
name
可用于非限定查找,如同在与此使用声明出现的位置相同的类作用域、块作用域或命名空间中声明一样

使用名称空间
ns_name
;(5)
5) using指令:从using指令之后任何名称的非限定名称查找的角度来看,直到它出现的范围结束,命名空间名称中的每个名称都是可见的,就像它是在最近的封闭命名空间中声明的一样,该命名空间包含using指令和命名空间名称

因此,基本上您可以在命名空间
Foo
之外(但在using声明的范围内)编写
Bar
而不是
Foo::Bar
,而命名空间
Foo
中的其他符号仍然需要全名


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

的可能重复项,因此它与
使用名称空间Foo;
完全相同,但它限制了
条形图
?@JonathanMee的范围暴露,正是如此与
使用命名空间Foo;
完全相同,但它将作用域公开限制为
Bar
?@JonathanMee。您可能希望包括这一点,即它仅限于引入using声明的作用域。“就像在与此using声明出现的位置相同的类作用域、块作用域或命名空间中声明一样”-这是在引号中,但我也将其添加到了解释中。您可能希望包括,这仅限于引入using声明的范围。“好像在与此using声明出现的位置相同的类范围、块范围或命名空间中声明”-这是在引号中,但我也将其添加到了解释中。