命名空间

      一个项目往往是许多人协作完成的,如果A定义了a 这个变量,而B也定义了a这个变量那么就会发生命名冲突。命名空间大家都知道是用来解决命名冲突问题的。

1下面我们就以标准输入输出为例;先来介绍一下标准输入输出,

1)iostream库包含两个基础类型istream ostream   ,分别表示输入流和输出流

流;;随时间的推移,字符顺序生成或消耗的


2)标准输入输出对象;

定义了四个

Istream有一个;标准输入cin

ostream  有三个;标准输出cout   

标准错误;cerr(常用来输出警告和错误)

clog;常用来输出程序运行的一般性错误;

系统通常将程序所运行的窗口与这些对象关联起来。因此,当我们读取cin,数据将从正在运行的窗口读入,当我们想cout ,cerr,clog写入数据时将会写到同一个窗口。


3)使用标准库中的名字,前缀std::指出名字coutend1是定义在名为std的命名空间中的。命名空间的作用是可以帮助我们避免不经意的名字定义冲突,以及使用库时相同名字导致的冲突。(标准库定义的所有名字都在命名空间std中)

如下

命名空间命名空间


这是使用命名空间的一种方法,前缀 命名空间名:: 指出

下面是另一种方法

命名空间命名空间


即用using   namespace     std;把std这个命名空间展开(我的理解是略有些相似于#include<>),后面使用时就不用像上面用前缀 命名空间名:: 指出。但这种方法有一个坏处就是把此命名空间里的东西暴漏出来了(暴漏到了全局),这时再想命名一个与这个命名空间包含的变量名相同的名字时还是会发生命名冲突。

2.命名空间是可以嵌套的,如下

命名空间命名空间