一个namespace的问题
namespace A
{
int i;
namespace B
{
namespace C
{
int i;
}
using namespace C;
void f1()
{
i = 5; // OK, C::i visible in B and hides A::i
}
}
namespace D
{
using namespace B;
using namespace C;
void f2()
{
i = 5; // ambiguous, B::C::i or A::i?
}
}
}
上面的程序中,为什么第一条注释处的语句正确,而第二条注释处的语句不正确。
[解决办法]
首先我们要明白,使用指示并不导入任何具体符号,只是让该名字空间变得可以访问,使用声明才导入具体符号。
分两部分看吧,对于第一条语句,相当于以下代码:
namespace A{ int i; namespace B { namespace C { int i; } using namespace C; void f1() { i = 5; // OK, C::i visible in B and hides A::i } }}