想必我们在写C++语言时经常在main.cpp文件内写下using namespace std 这句代码,这句代码有何作用呢?
其实写上这句代码后,我们就会使用std的命名空间。
好处:可以帮我们节省很多不必要的代码(std::就可以省去不写了)。
坏处:容易造成命名空间污染。
当我们写出同名的变量或者函数或者结构体时,一般境况下就会报错,但是我们希望都保留下来,并且在需要的时候调用他们,如何保留并且调用我们想要的,这里就用到了namespace,这也是设计的初衷——解决命名冲突的问题。
当我们有两个相同变量名时编译器就会报错。
这里可以看到,两个相同的变量都保留了,不过在使用我们namespace中的变量时需要 _Name:: 变量
::运算符是一个作用域,如果::前面什么都没有加代表的是全局作用域
命名空间加上::就是我们命名空间的作用域了。
命名空间的定义必须定义在全局范围
命名空间下可以存放变量、函数、结构体、类
命名空间可以重名、重名的会自动合并空间
命名空间可以取别名
命名空间可以没有名字 ,没有名字相当于给命名空间 内的所有成员加上了static修饰相当于只能被当前文件调用,属于内部链接属性 (就近原则)
命名空间中的函数可以先声明,在外部定义,定义时需要加上命名空间作用域
命名空间中的函数可以先声明,在外部定义,定义时需要加上命名空间作用域