#include<iostream>
using namespace std;
/*命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制
*比如说,在一个大型项目中,要用到多家软件开发商提供的类库。在
*事先没有约定的情况下,两套类库可能存在同名的函数或是全局变量而
*产生冲突。项目越大,用到的库越多,开发人员越多,这种冲突就会约
*明显
*/
#if 0
int v=55;
int main()
{
/*
*这里会输出5,这里局部变量会覆盖全局变量。但是这里有一点,
*一个叫局部,一个叫全局。但是这里给你提出一个需求,我非要访问全局的怎么办
*在C语言中,就是在你定义局部v的之前定义一个指针,但是文件一多,这个问题就
*很难使用这种方法解决。这么办,于是C++就想到了命名空间这么一回事
*你访问一个全局的,就是一个无名命名空间,他没有名字,就是用::,
*;;作用域运算符,作用域运算符前面要放命名空间,
*/
int *a=&v;
int v=5;
cout<<v<<endl;
cout<<*a<<endl;
cout<<::v<<endl;
}
#endif
/*
* namespace是命名空间的关键字
*namespace NAMESPACE
*{
* 全局变量 int q;
* 数据类型 struct Stu{}
* 函数 void func()
* 其他命名空间 namespace
*}
*/
#if 0
//如果没有命名空间就重定义了
namespace Space{
int x;
int y;
}
namespace Other{
int x;
int y;
}
int main()
{
//用这个可以把我们命令空间给解包了。解包到这个局部空间里面去。
//using namespace Space;
//用这个也可以,但是这里只解包一个
#if 0
using Space::x;
//Space::x=200;
x=200;
//y=100;
cout<<Space::x<<endl;
#endif
/*
*假设我们解包之后,跟本地的名字有冲突,如下
*using namespace Space;
*x=20;
*int x,y;
*这时,就要加作用域了。,或者加扩号 如下
*/
{
using namespace Space;
x=100;
y=1000;
}
{
using namespace Other;
x=200;
y=2000;
}
int x,y;
x=300;
y=3000;
}
#endif
/*
*命名空间支持嵌套
*
*/
#if 0
namespace Space{
int x;
int y;
namespace Other{
int m;
int n;
}
}
int main()
{
Space::Other::m=100;
return 0;
}
#endif
/*
*这里会把这两个命名空间给合并
*
*/
namespace Space{
int x;
}
namespace Space{
int y;
}
int main()
{
using namespace Space;
x=100;
y=1000;
}