c++ - 使用静态函数变量与类变量来存储一些状态

标签 c++ static-variables class-variables

假设我有这样的功能:

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

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

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

    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]);
    }
    

第一个解决方案增加了一点我不想要的复杂性。我喜欢保持原样。

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

那么使用静态变量方法是一个很好的解决方案吗?多实例类是否有任何在线解决方案? (对于这个特定的数组元素索引问题可以有一个解决方案,但我只是编造的,我说的是为下一次函数调用存储一些值)

最佳答案

您已经知道为什么函数作用域静态是一个坏主意:

only works if that class have only one instance

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

只需将状态保持为常规类成员变量即可。

关于c++ - 使用静态函数变量与类变量来存储一些状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353035/

相关文章:

C++ 实现脚本(可重复操作)

java - 使用类作为变量标识符?

python - 使用 deepcopy 创建一个新的 obj,但新的 obj 与旧的 obj 共享变量

c++ - 画一个不同颜色扇区的圆环

c++ - 几个排序问题

java - 局部静态变量和 Java

objective-c - 从类方法访问属性?

java - 找不到符号方法

c++ - 在 mysql db c++ 中存储 blob 数据的语法

python - 创建新实例时,python中的类变量是否会再次声明?