使用静态函数变量与 class 变量来存储一些状态
Using static function variable vs class variable to store some state
假设我有这样的功能:
void processElement() {
doSomething(someArray[lastProcessedElement + 1]);
}
问题是,每次调用此函数时,我都需要存储调用 doSomething 的最后一个元素。所以在这里我有两个选择:
我可以创建一个名为 lastProcessedElement 的私有 class 变量,并在每次调用该函数时递增它的值。这种方法似乎最常见。所以代码可以是这样的:
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]);
}
第一个解决方案增加了一点我不想要的复杂性。我喜欢保持原样。
我知道第二种解决方案只有在 class 只有一个实例时才有效。
那么使用静态变量方法是一个很好的解决方案吗?多实例class是否有任何在线解决方案? (对于这个特定的数组元素索引问题可以有一个解决方案,但我只是编造的,我说的是为下一次函数调用存储一些值)
您已经明白为什么函数作用域静态是一个坏主意:
only works if that class have only one instance
这是一个糟糕的设计限制。
只需将状态保持为常规 class 成员变量即可。
假设我有这样的功能:
void processElement() {
doSomething(someArray[lastProcessedElement + 1]);
}
问题是,每次调用此函数时,我都需要存储调用 doSomething 的最后一个元素。所以在这里我有两个选择:
我可以创建一个名为 lastProcessedElement 的私有 class 变量,并在每次调用该函数时递增它的值。这种方法似乎最常见。所以代码可以是这样的:
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]); }
第一个解决方案增加了一点我不想要的复杂性。我喜欢保持原样。
我知道第二种解决方案只有在 class 只有一个实例时才有效。
那么使用静态变量方法是一个很好的解决方案吗?多实例class是否有任何在线解决方案? (对于这个特定的数组元素索引问题可以有一个解决方案,但我只是编造的,我说的是为下一次函数调用存储一些值)
您已经明白为什么函数作用域静态是一个坏主意:
only works if that class have only one instance
这是一个糟糕的设计限制。
只需将状态保持为常规 class 成员变量即可。