1. 全局命名空间污染问题
1.1 原因之一:引入的库与库之间的实体名字冲突
我们在编写大型程序时,可能会同时引入多方的库。假如我们同时引入A、B、C 三个库。 为了引入这三个库,我们需要使用其定义的类、变量、函数等。 因此会引入他们的头文件。 假如A库的头文件的名字的命名和B库头文件名字的名字是一样的。而对于主函数来说,它要同时引入这两个库,那么编译器就会报错,因为它认为一个实体定义了两次。
1.2 原因之二:引入库 与 全局实体名字冲突
也有可能你只引入了A库,你自己在全局命名空间也定义了一些函数、变量等,这些实体的名字 可能和你引入的库的头文件中定义的函数、类名等 是一样的,这也会发生命名的冲突。
上述产生的命名冲突的问题,就是所谓的全局命名空间污染问题。
2. 如何解决命名冲突问题?
实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。例如,从原本的命名空间中拿出来一块,取名叫std,那么std 里面的名字就可以和std以外的名字一样,但是使用的时候通过加上前缀,可以使得编译器能够标识出来这两个名字是不同的。
3. 使用命名空间
3.1 命名空间的定义
定义命名空间,实际上就是拿出来一块空间,给它起个名字。
namespace mylib
{
class Myclass{
};
int myfunction(void);
int