为什么命名空间和 class 在 C++ 中具有相同的语法?

Why do namespace and class have the same syntax in C++?

命名空间和classes在C++中是两个不同的概念。命名空间只是为了防止名称冲突,而不是 class 是用户定义的类型。

为什么他们使用相同的::语法?

例如:

namespace::function();
class::function();

命名空间和 classes 都形成 scopesScope 是一个对命名空间和 classes 都相当一致的概念:有 class 作用域和 C++ 中的命名空间作用域(以及其他类型的作用域) ).由于 :: 是一个 作用域解析运算符 ,因此它以语法相似的方式与名称空间和 classes 一起使用并没有什么不寻常之处。

因为类,就像命名空间引入了一个(通常命名的)作用域。范围解析运算符与 类 和名称空间的工作方式相同。增加更多的操作员来做同样的事情没有任何好处。

如果类不引入作用域,那就麻烦了:

struct buffer {
    int size, *data;
};

struct list {
     node* head;
     int size; // oops, name conflict!
};

显然,类 必须为其成员引入范围。