我试图理解为什么这个程序没有为 i 提供名称查找歧义:
namespace X { int i = 1; }
namespace Q {
namespace P {
int i = 2;
using namespace X;
}
using namespace P;
int l = i;
}
int main() {}
如果我们像这样修改它,我们会得到名称查找歧义:
namespace X { int i = 1; }
namespace P {
int i = 2;
using namespace X;
}
using namespace P;
int l = i;
int main() {}
我在这里所做的唯一更改是删除命名空间 Q 并将其内容放在全局命名空间中。
我尝试了 3 种不同的编译器:
- GCC 和 Clang 与http://melpon.org/wandbox
- 带有http://webcompiler.cloudapp.net/的可视化 C++
所有人都给出了这封电子邮件中所述的结果,我正试图找出原因。
任何人都可以用 c++ 标准来解释这种行为吗?我无法理解它。