使用静态函数变量vs类变量来存储某些状态

时间:2016-07-13 13:23:31

标签: c++ static-variables class-variables

假设我的功能如下:

void processElement() {
    doSomething(someArray[lastProcessedElement + 1]);
}

问题是,每次调用此函数时,我都需要存储我调用doSomething的最后一个元素。所以在这里我有两个选择:

  • 我可以创建一个名为lastProcessedElement的私有类变量,并在每次调用该函数时递增它的值。这种方法似乎最常见。所以代码可以是这样的:

    class Foo {
        int lastProcessedElement = 0;     
    
        public:  
        void processElement() {
            doSomething(someArray[++lastProcessedElement]);
        }
    }
    
  • 作为第二个选项,我可以在函数中创建一个静态变量并每次递增它:

    // Class is not important here, so the function is:
    void processElement() {
        static int lastProcessedElement = 0;
        doSomething(someArray[++lastProcessedElement]);
    }
    

第一种解决方案增加了一些我不想要的复杂性。我喜欢保持原位。

我知道第二个解决方案只有在该类只有一个实例时才有效。

那么使用静态变量法是一个很好的解决方案吗?是否有多实例类的在线解决方案? (这个特定的数组元素索引可以有一个解决方案,但我刚刚提到了,我正在谈论为函数的下一次调用存储一些值)

1 个答案:

答案 0 :(得分:5)

你已经弄清楚为什么功能范围的静态是一个坏主意:

  

仅在该类只有一个实例时才有效

这是一个糟糕的设计限制。

将状态保持为常规类成员变量。