C++重新认知:namesapce

0、引言 为什么要用到命名空间

想必我们在写C++语言时经常在main.cpp文件内写下using namespace std 这句代码,这句代码有何作用呢?

其实写上这句代码后,我们就会使用std的命名空间。

好处:可以帮我们节省很多不必要的代码(std::就可以省去不写了)。

坏处:容易造成命名空间污染。

当我们写出同名的变量或者函数或者结构体时,一般境况下就会报错,但是我们希望都保留下来,并且在需要的时候调用他们,如何保留并且调用我们想要的,这里就用到了namespace,这也是设计的初衷——解决命名冲突的问题

一、namespace

C++重新认知:namesapce_第1张图片

当我们有两个相同变量名时编译器就会报错。

1.1 命名空间声明格式

namespace _Name
{
}

这里可以看到,两个相同的变量都保留了,不过在使用我们namespace中的变量时需要 _Name:: 变量
C++重新认知:namesapce_第2张图片

1.2 ::运算符

::运算符是一个作用域,如果::前面什么都没有加代表的是全局作用域

C++重新认知:namesapce_第3张图片

命名空间加上::就是我们命名空间的作用域了。

1.3 命名空间的使用

  • 命名空间的定义必须定义在全局范围

  • 命名空间下可以存放变量、函数、结构体、类

  • 命名空间可以重名、重名的会自动合并空间

C++重新认知:namesapce_第4张图片

  • 命名空间可以嵌套命名空间

C++重新认知:namesapce_第5张图片

  • 命名空间可以取别名

  • 命名空间可以没有名字 ,没有名字相当于给命名空间 内的所有成员加上了static修饰相当于只能被当前文件调用,属于内部链接属性 (就近原则)

C++重新认知:namesapce_第6张图片

C++重新认知:namesapce_第7张图片

  • 命名空间中的函数可以先声明,在外部定义,定义时需要加上命名空间作用域
    C++重新认知:namesapce_第8张图片

  • 命名空间中的函数可以先声明,在外部定义,定义时需要加上命名空间作用域

你可能感兴趣的:(C++重新认知系列,c++,开发语言)