10.2.3 名字空间的使用

上面所介绍的一些规则刚开始时也许会使我们感到气馁,特别是当我们知道将来一直使用它们会有什么感觉时,尤其如此。一般说来,只要真正理解了它们的工作机理,使用它们也会变得非常简单。需要记住的关键问题是当引入一个全局using指令时(可以在任何范围之外通过使用using namespace),就已经为那个文件打开了该名字空间。对于一个实现文件(一个.cpp文件)来说,这通常是一个好方法,因为只有在该文件编译结束时,using指令才会起作用。也就是说,它不会影响任何其他的文件,所以可以每次在一个实现文件中调整对名字空间的控制。例如,如果发现由于在一个特定的实现文件中使用太多的using指令而产生名字冲突,就要对该文件做简单的改变,以致使用明确的限定或者using声明来消除名字冲突,这样不用修改其他的实现文件。

头文件的情况与此不同。不要把一个全局的using指令引入到一个头文件中,因为那将意味着包含这个头文件的任何其他头文件也会打开这个名字空间(头文件可以被另一个头文件包含)。

所以,在头文件中,最好使用明确的限定或者被限定在一定范围内的using指令和using声明。在本书中将讨论这种用法,通过这种方法,就不会“污染”全局名字空间和后退到C++的名字空间引入前的世界。