为什么命名空间和 class 在 C++ 中具有相同的语法?
Why do namespace and class have the same syntax in C++?
命名空间和classes在C++中是两个不同的概念。命名空间只是为了防止名称冲突,而不是 class 是用户定义的类型。
比为什么他们使用相同的::
语法?
例如:
namespace::function();
class::function();
命名空间和 classes 都形成 scopes。 Scope 是一个对命名空间和 classes 都相当一致的概念:有 class 作用域和 C++ 中的命名空间作用域(以及其他类型的作用域) ).由于 ::
是一个 作用域解析运算符 ,因此它以语法相似的方式与名称空间和 classes 一起使用并没有什么不寻常之处。
因为类,就像命名空间引入了一个(通常命名的)作用域。范围解析运算符与 类 和名称空间的工作方式相同。增加更多的操作员来做同样的事情没有任何好处。
如果类不引入作用域,那就麻烦了:
struct buffer {
int size, *data;
};
struct list {
node* head;
int size; // oops, name conflict!
};
显然,类 必须为其成员引入范围。
命名空间和classes在C++中是两个不同的概念。命名空间只是为了防止名称冲突,而不是 class 是用户定义的类型。
比为什么他们使用相同的::
语法?
例如:
namespace::function();
class::function();
命名空间和 classes 都形成 scopes。 Scope 是一个对命名空间和 classes 都相当一致的概念:有 class 作用域和 C++ 中的命名空间作用域(以及其他类型的作用域) ).由于 ::
是一个 作用域解析运算符 ,因此它以语法相似的方式与名称空间和 classes 一起使用并没有什么不寻常之处。
因为类,就像命名空间引入了一个(通常命名的)作用域。范围解析运算符与 类 和名称空间的工作方式相同。增加更多的操作员来做同样的事情没有任何好处。
如果类不引入作用域,那就麻烦了:
struct buffer {
int size, *data;
};
struct list {
node* head;
int size; // oops, name conflict!
};
显然,类 必须为其成员引入范围。