避免名字冲突

  名字空间就是为了表示逻辑结构。最简单的这类结构就是分清楚由一个人写的代码与另一个人写的代码。这种简单划分也可能具有极大的实际重要性。

  当我们只使用一个单独的名字空间时,从一些相互独立的部分组合起一个程序,就可能遇到一些不必要的困难。问题在于原本假定分离的部分中可能已经定义了同样的名字。在组合进同一个程序时,这些名字就会出现冲突。考虑

    // my.h:
        char f(char);
        int f(int);
        class String { /* ... */ };
    // your.h
        char f(char);
        double f(double);
        class String { /* ... */ }

有了这些定义之后,第三方很难同时使用my.h和your.h。一个明显的解决办法是将每组声明包裹在它自己的名字空间里:

    namespace My {
        char f(char);
        int f(int);
        class String { /* ... */ };
    }

    namespace Your {
        char f(char);
        int f(int);
        class String { /* ... */ };
    }

现在我们就可以通过显式的限定(8.2.1节)、使用声明(8.2.2节)或者使用指令(8.2.3节),去使用My和Your里的声明。

🔚