在c ++中定义一堆静态方法

har*_*k27 5 c++

哪个合适:

class xyz {
  static int xyzOp1() { }
  static int xyzOp2() { }
};
Run Code Online (Sandbox Code Playgroud)

要么

namespace xyz {
  static int xyzOp1() {}
  static int xyzOp2() {}
};
Run Code Online (Sandbox Code Playgroud)

在我们使用类标记与命名空间标记进行比较时,我们可以获得具体的内容吗?

内存管理还有什么不同,我们需要担心吗?

CB *_*ley 8

他们的意思不同.在class上下文中,static意味着方法不需要对象进行操作,因此更像是自由函数.在namespace上下文中,这意味着函数具有内部链接,因此对于定义它们的转换单元是唯一的.

另外,a的成员class默认是私有的,因此,如上所述,您的类函数只能相互调用.您需要添加public:访问说明符或使classa struct更改它.

如果您需要一堆免费函数并且不需要类对象,则可能更适合将它们定义为static命名空间中的非函数.如果它们在头文件中被定义,则通常需要声明它们inline.如果它们在a中定义,则暗示这意味着class.


Mar*_*wis 5

如果没有看到这些函数的主体,我会说命名空间更合适.使用命名空间,您可以拥有using语句,这样您在调用函数名时就不必完全限定函数名.

使用类的唯一情况是静态方法与类的对象有任何关系,例如当他们需要访问实例的私有成员时.根据您的描述,您似乎不会创建任何xyz实例,因此您不应在此处使用类.

从内存管理的角度来看,这些方法之间没有区别.