假设我的功能如下:
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]);
}
第一种解决方案增加了一些我不想要的复杂性。我喜欢保持原位。
我知道第二个解决方案只有在该类只有一个实例时才有效。
那么使用静态变量法是一个很好的解决方案吗?是否有多实例类的在线解决方案? (这个特定的数组元素索引可以有一个解决方案,但我刚刚提到了,我正在谈论为函数的下一次调用存储一些值)
答案 0 :(得分:5)
你已经弄清楚为什么功能范围的静态是一个坏主意:
仅在该类只有一个实例时才有效
这是一个糟糕的设计限制。
将状态保持为常规类成员变量。