class也是一个名字空间,不过他是封闭的,也就是说你只能在一个文件里面定义class包含什么(通俗点讲,就是一个class只能有一个头文件); namespace是开放的,和class不同的是你可以在多个文件里面象同一个namespace里面添加东西。比如stl里面的东西都是在名字空间std里面,但是却定义在了多个文件里面。 class做名字空间时,与namespace形式上类似 但namespace是开发的,可以追加内容,而class的定义是一次性的 另外,对class A的成员M用 A::M 并不总是允许的,这种用法只在两种情况下有效: 1. 类的成员函数引用本类(含祖先类)的成员 2. 其它函数引用类的静态成员 因为类中定义了一个(非静态)成员变量,并没有定义其实体,只是定义了一个名字。只有创建了类的实例(对象),成员变量的实体才存在。 但 namespace 不存在这个问题,因为,namespace 中定义的变量,就是一个实体,在任何情况下(只要在可见域内),对namespace A,A::M 的写法都是允许的。