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

时间:2016-06-20 13:10:44

标签: c++ class scope using named-scope

鉴于以下内容:

xmlns:android="http://schemas.android.com/apk/res/android"/>

声明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

2 个答案:

答案 0 :(得分:5)

来自cppreference

  

使用 public Automobile(Brand brand,ModelAudi modelAudi) { this.Brand = brand; this.ModelAudi = modelAudi; } public Automobile(Brand brand,ModelBmw modelBmw) { this.Brand = brand; this.ModelBmw = modelBmw; } public Automobile(Brand brand,ModelAudi modelAudi,ModelBmw modelBmw) { this.Brand = brand; this.ModelBmw = modelBmw; this.ModelAudi = modelAudi; } ; (6)
  (...)
  6)using-declaration:使命名空间ns_name::name中的符号name可以进行非限定查找,就好像在相同的类范围,块范围或命名空间中声明这个using-declaration出现一样。

     

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

所以基本上你可以在命名空间ns_name之外写Bar而不是Foo::Bar(但在using声明的范围内),而命名空间{{1}中的其他符号仍然需要全名。

如果您使用Foo,则可以使用其本地名称访问Foo中的所有符号,而不使用明确的using namespace Foo

答案 1 :(得分:1)

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