#include <iostream>
using namespace std;
namespace A
{
int a = 100;
namespace B //嵌套一个命名空间B
{
int a =20;
}
}
int a = 200;//定义一个全局变量
int main(int argc, char *argv[])
{
cout <<"A::a ="<< A::a << endl;
cout <<"A::B::a ="<<A::B::a << endl;
cout <<"a ="<<a << endl;
cout <<"::a ="<<::a << endl;
int a = 30;
cout <<"a ="<<a << endl;
cout <<"::a ="<<::a << endl;
return 0;
}
结果:
A::a =100
A::B::a =20
a =200 //全局变量a
::a =200
a =30 //局部变量a
::a =200
即:全局变量 a 表达为 ::a,用于当有同名的局部变量时来区别两者。
关于 using 的错误事例
#include <iostream>
using namespace std;
namespace A
{
int a = 100;
int fun()
{
cout<<"a = "<<a<<endl;
}
namespace B //嵌套一个命名空间B
{
int a =20;
int fun()
{
cout<<"a = "<<a<<endl;
}
}
}
int main(int argc, char *argv[])
{
cout<<a<<endl;
fun();
return 0;
}
这样会出错:会显示 a 变量和 fun 函数 “was not declared in this scope”,即找不到这个 a 和 fun 函数。
解决办法: 用 using 来告诉编译器用到的是哪个命名空间内的内容。在 main() 上面加 using namespace A; 或者 using namespace A::B; 。这样就可以使用其中的 a 和 fun()。但是不能同时使用,因为这样也会导致编译出错,编译器器不知道要去使用哪个 a 和 fun()。
命名空间冲突的情况:
#include <iostream>
using namespace std;
namespace A {
int a = 100;
namespace B //嵌套一个命名空间B
{
int a = 20;
}
}
int a = 200;//定义一个全局变量
int main(int argc, char *argv[]) {
cout << "A::a =" << A::a << endl; //A::a =100
cout << "A::B::a =" << A::B::a << endl; //A::B::a =20
cout << "a =" << a << endl; //a =200
cout << "::a =" << ::a << endl; //::a =200
using namespace A;
cout << "a =" << a << endl; // Reference to 'a' is ambiguous // 命名空间冲突,编译期错误
cout << "::a =" << ::a << endl; //::a =200
int a = 30;
cout << "a =" << a << endl; //a =30
cout << "::a =" << ::a << endl; //::a =200
//即:全局变量 a 表达为 ::a,用于当有同名的局部变量时来区别两者。
using namespace A;
cout << "a =" << a << endl; // a =30 // 当有本地同名变量后,优先使用本地,冲突解除
cout << "::a =" << ::a << endl; //::a =200
return 0;
}