using声明格式为:using 加限定修饰的名字空间成员(using std::string),using指示符格式为using namespace 名字空间名(using namespace std)。前者保留了该名字空间域,但是将成员名字与一个局部同义词相关联;后者是把该名字空间的所有成员转移到包含该名字空间定义的那个域中,其效果相当于去掉了该名字空间,还有一个重要区别就是如果引起二义性错误,前者在声明点就可以检测到,而后者一定要在该名字空间成员被使用是才能被检测到。
namespace A
{
int i,j;
}
int i;
eg1:
void fun()
{
using a::i; //相当于在这个局部域中定义int i;,故这个局部域中不能出现类似于int i;的重复定义。全局域中的 int i;被屏蔽
}
eg2:
void fun()
{
using namespace A; //相当于全局域中的那个名字空间A不存在
i=6; //error!,二义性,是A::i,还是::i,但是可以通过限定修饰达到目的
::i=6; //right;
A::i=6; //right
j=6; //right!A::i
}