[C++基础]002_名字空间(namespace)
1 #include <iostream> 2 using namespace std; 3 4 namespace A{ 5 int a = 1; 6 } 7 8 namespace B{ 9 int b = 2; 10 } 11 12 namespace C{ 13 int c = 3; 14 } 15 16 int main(){ 17 18 int a = 10; 19 int b = 20; 20 int c = 30; 21 22 using namespace A; 23 using namespace B; 24 using namespace C; 25 26 cout<<"a = "<<a<<endl; 27 cout<<"b = "<<b<<endl; 28 cout<<"c = "<<c<<endl; 29 30 cout<<"a::a = "<<A::a<<endl; 31 cout<<"b::b = "<<B::b<<endl; 32 cout<<"c::c = "<<C::c<<endl; 33 34 system("pause"); 35 return 0; 36 }
以上代码,会输出什么呢?答案如下:
1 a = 10 2 b = 20 3 c = 30 4 a::a = 1 5 b::b = 2 6 c::c = 3 7 请按任意键继续. . .
可见,函数内定义的变量声明会覆盖命名空间里的变量声明。所以,这里需要编程者注意,如果你在名字空间里做了一些赋值操作,那么在调用它的地方,一定要注意会不会被覆盖。
注:最好的调用方法是名字空间::变量名。
1 namespace A{ 2 int a = 1; 3 } 4 5 namespace B{ 6 int b = 2; 7 } 8 9 namespace C{ 10 int c = 3; 11 int b = 3; 12 } 13 14 int main(){ 15 16 //int a = 10; 17 //int b = 20; 18 //int c = 30; 19 20 using namespace A; 21 using namespace B; 22 using namespace C; 23 24 cout<<"a = "<<a<<endl; 25 cout<<"b = "<<b<<endl; 26 cout<<"c = "<<c<<endl;
上面的代码是通不过编译的,因为变量b的调用不明确,这就是所谓的“名字冲突”。