Bootstrap

谈谈你对命名空间的理解:

1)namespace命名空间的存在是为了实现在同一个工程中,通过使用命名空间可以实现,同一变量名的多次定义而不报错。
2)可以使得代码模块化。将逻辑相关的标识符组织起来,系统更加整洁、清楚;
3)随着工程量的增加,变量命名上避免不了出现重名,主要原因是:为了防止名称冲突(在不同的命名空间中,即使有两个相同的变量名,也是两个不同的变量),在实际工作中,我们基本都使用标准命名空间。
4)命名空间只能在全局范围内进行定义,不可以定义在函数内部。
5)在命名空间内,可以用于存放变量,函数,结构体,类,同时也可以嵌套其他的命名空间。
6)存在匿名的命名空间类似静态全局变量,就是为了防止让其他工程通过外部调用,使用此匿名空间。

namespace 
{
int data = 123;
}

 可以在本文件中 直接使用 data,限制这个匿名命名空间中的成员只能在本文件中使用,类似C语言中的static修饰的全局变量。


7)命名空间是可以起别名的。因为命名空间允许嵌套,所以可能出现一些比较长的名字。

namespace A
{
	namespace B
	{
		namespace C
		{
			double pi=3.141592653;
		}
	}
}
//方式一:
A::B::C::pi
//方式二:
namespace ABC=A::B::C;
cout<<ABC::pi;//是不是简洁很多

8)  ----引进整个命名空间 ---将这个盒子 全部打开
        例如:using namespace 命名空间的名字;
        ---引进命名空间的某个成员 --》将这个盒子中某个成员的位置打开
        例如:using 命名空间的名字::成员名;
        ---调用的时候指定是哪一个命名空间下的成员(建议使用这种方式)
        例如:命名空间的名字::成员名
        比如
        ---cout<<space1::val;
        ---space1::print();

9)同名命名空间 :命名空间可以分开定义 ,也就是说,你在定义一个命名空间之后,如果后面想要在这个命名空间里面再次添加某些数据 成员或者函数成员,可以再次接着定义。

;