来自cppreference:
从 using 指令之后的任何名称的非限定名称查找的角度来看,直到它出现的范围结束,命名空间名称中的每个名称都是可见的,就好像它是在最近的封闭命名空间中声明的一样,其中包含using 指令和命名空间名称。
包含命名空间名称的“最内部”作用域是声明命名空间名称的作用域,并且它必须包含包含 using 指令的作用域,以便 using 指令有效。
这意味着“包含 using 指令和命名空间名称的最近的封闭命名空间”就是声明了命名空间名称的命名空间。既然如此,为什么要说得这么啰嗦呢?
我是不是误会了什么?这里有我遗漏的微妙之处吗?
只是声明了命名空间名称的命名空间。 在这种情况下,为什么要以如此冗长的方式表达它?
情况并非总是如此。为了清楚起见,请考虑以下人为的示例:
int i = 12;
namespace outer
{
namespace n1
{
int i = 10;
}
}
namespace n2
{
void f()
{
using namespace outer::n1;
int k = i; //this is ambigious because i already exists in global namespace
}
}