在使用语句中指定类名的内容是什么

What Does Specifying a Class Name in a using Statement Do?

本文关键字:是什么 语句      更新时间:2023-10-16

给定以下情况:

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)使用删除:从命名空间ns_name制作符号name,可用于无限制的查找,就好像在同一类范围,块范围或名称空间中声明,以便在此使用此命名空间。

使用命名空间ns_name;(5)
5)使用指导性:从使用方向性之后的任何名称的不合格的名称查找的角度,直到出现范围的末端, namespace-name中的每个名称都是可见的好像是在最近的封闭名称空间中声明的,该空间既包含使用指示空间和名称空间名称。

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

如果使用using namespace Foo,则可以通过其本地名称访问Foo中的所有符号,而无需明确的Foo::

它允许您在没有Foo名称空间的情况下使用Bar