假设我有这样的功能:
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/