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

时间:2017-01-13 19:32:33

标签: c++ class syntax namespaces colon

命名空间和类是C ++中的两个不同概念。命名空间仅用于防止名称冲突,而类是用户定义的类型。

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

例如:

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

2 个答案:

答案 0 :(得分:6)

命名空间和类都构成 scopes 范围是一个相当统一的命名空间和类的概念:C ++中的类范围和命名空间范围(以及其他类型的范围)。由于::是一个范围解析运算符,因此它在语法上类似的方式与命名空间和类一起使用时并不罕见。

答案 1 :(得分:2)

因为类与名称空间一样引入了(通常是命名的)作用域。范围解析运算符与类和命名空间的工作方式相同。添加更多运算符来做同样的事情没有任何优势。

如果课程没有引入范围,则会出现问题:

struct buffer {
    int size, *data;
};

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

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