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

时间:2009-08-26 06:10:00

标签: c++

哪个合适:

class xyz {
  static int xyzOp1() { }
  static int xyzOp2() { }
};

OR

namespace xyz {
  static int xyzOp1() {}
  static int xyzOp2() {}
};

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

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

3 个答案:

答案 0 :(得分:8)

他们意味着不同的东西。在class上下文中,static表示方法不需要对象操作,因此更像是自由函数。在namespace上下文中,这意味着函数具有内部链接,因此对于定义它们的翻译单元是唯一的。

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

如果你需要一堆免费函数而不需要类对象,那么它可能更适合在命名空间中将它们定义为非static函数。如果它们在头文件中定义,那么它们通常需要声明inline。如果它们在class中定义,则暗示这一点。

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:1)

选择使用哪种方法的主要因素是您的函数本身可能希望在私有状态下操作或使用私有方法,在这种情况下,静态类绝对是更好的选择。

还有一些其他细微差别,但最终静态类将为您提供更多的封装控制。