在对象是静态的类函数中声明静态变量是否有意义

时间:2012-02-06 21:24:32

标签: c++ static static-members

让我们说我的班级让我说

static classA myObject;

void classA::update(int elapsed)
{
  static int sumElapsed = 0;
  sumElapsed+= elapsed;

}

似乎我的问题很难理解。但是如果我们说myObject是classA的单例。本地静态int sumElapsed与classA的私有成员int sumElapsed之间是否存在差异,除了可以访问它们的范围之外。

5 个答案:

答案 0 :(得分:3)

不确定。例如,在单身模式中。静态变量的引用(或指针)也从静态方法返回。


有关示例,请参阅此处:c++ Meyers singleton undefined reference

顺便说一句,如果您有兴趣:Are Singletons really that bad?

答案 1 :(得分:0)

如果你不想覆盖sumElapsed那么肯定,但看起来将classA中的sumElapsed封装为静态变量似乎更有意义。

答案 2 :(得分:0)

实际上,当你在类模板中需要某种静态成员时,首先没有真正好的选择。此外,如果成员不是微不足道的,那么您可能希望首先将它们放入函数中,以便对初始化顺序进行一定程度的控制。

一般来说,要注意无论是将静态成员放入类还是函数中,它仍然有效地实现了Singleton 反模式

答案 3 :(得分:0)

当然。如果sumElapsed不是静态的,那么每次调用函数时它都会被覆盖;事实上,它不会。 classA::update本身是静态的这一事实无关紧要;只考虑它是否是一个全局函数(例如在C中)。

答案 4 :(得分:0)

您应该使用静态类来保存与特定对象无关的方法。话虽这么说,使用静态类只保存不能被对象实例化的静态成员,不应该被覆盖。