读书人

一个namespace的有关问题

发布时间: 2012-03-18 13:55:39 作者: rapoo

一个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?
}
}
}

上面的程序中,为什么第一条注释处的语句正确,而第二条注释处的语句不正确。

[解决办法]
首先我们要明白,使用指示并不导入任何具体符号,只是让该名字空间变得可以访问,使用声明才导入具体符号。
分两部分看吧,对于第一条语句,相当于以下代码:

C/C++ code
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         }    }} 

读书人网 >C++

热点推荐