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的调用不明确,这就是所谓的“名字冲突”。
原文链接: https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/08/2715919.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/65131
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!