引用自标准:
using-directive指定在using-directive出现之后的范围内可以使用所提名命名空间中的名称。在未经限定的名称查找期间(3.4.1),这些名称显示为在最近的封闭命名空间中声明,该命名空间包含了using-directive和所提名的命名空间。
看一下这段代码:
namespace A {
int fn() { return 1; }
}
namespace Inner {
int fn() { return 2; }
namespace B {
using namespace A;
int z = fn();
}
}
在我还不了解命名空间的确切规则之前,我曾期望在使用了
using namespace A
后,z
将被初始化为1,因此期望使用A::fn()
。但实际上不是这样的,由于我引用的规则,Inner::fn()
被调用,z
将被初始化为2。这种行为背后的原理是什么呢?"似乎声明在最近的封闭命名空间中,该命名空间包含使用指令和所指定的命名空间"。
如果
using namespace
像应用于该命名空间中的所有内容一样工作,会有哪些问题呢?注:这个链接与我提出这个问题有关。