可以说我有这样的功能:
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]);
}
第一个解决方案增加了一点我不想要的复杂性。我喜欢把事情固定在原处。
我知道第二种解决方案仅在该类只有一个实例时才有效。
那么使用静态变量方法是一个很好的解决方案吗?多实例类有没有内嵌的解决方案? (对于这个特定的数组元素索引问题可以有一个解决方案,但我只是编造出来的,我正在谈论为函数的下一次调用存储一些值)
您已经弄清楚为什么函数范围内的静态是一个坏主意:
仅当该类只有一个实例时才有效
这是一个糟糕的设计限制。
只需将状态保留为常规类成员变量即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)