【问题标题】:What is the main difference between namespace & class? [duplicate]命名空间和类之间的主要区别是什么? [复制]
【发布时间】:2020-08-15 03:30:21
【问题描述】:

为什么我应该使用namespace 而不是class?主要区别在哪里?例如,在 JavaScript 中,namespace 可以由类模拟。那么,创建命名空间而不是类有什么意义呢?

【问题讨论】:

标签: c++


【解决方案1】:

考虑一个类似的问题:办公椅和火车之间的主要区别是什么?您可以坐在火车上模拟办公椅。用办公椅代替火车有什么意义?

类是一种类型。可以实例化类型的对象。例如:

class foo{}; // a class
foo f;       // this variable is instance of the class

命名空间不是类型。无法创建命名空间的实例。


此外,还可以有模板类:

template<typename T>
struct bar{};

不可能有命名空间模板。


另一方面,可以有匿名命名空间,并且可以通过using 声明将一个命名空间的成员带入另一个命名空间,这对于类的成员是不可能的。


那么,创建命名空间而不是类的意义何在?

我们需要将名称分组到更小的范围内以避免名称冲突。这就是命名空间的用途。

类当然也有作用域,但是当我们不需要类型时,定义类就没有意义了。

【讨论】:

    【解决方案2】:

    namespace 只是一种分隔和分组标识符的方法,以避免在编译时发生命名冲突。 class 是一种实际类型,您可以为其分配内存并为其创建实例。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2017-09-26
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多