#include <stdio.h>
void func() {
static int x = 0; // x is initialized only once across three calls of
// func()
printf("%d\n", x); // outputs the value of x
x = x + 1;
}
int main(int argc, char * const argv[]) {
func(); // prints 0
func(); // prints 1
func(); // prints 2
// Here I want to reinitialize x value to 0, how to do that ? <-- this line
return 0;
}
在上面的代码中,在调用func()3次之后,我想将x
重新初始化为零。有没有方法将它重新初始化为0?
答案 0 :(得分:2)
您希望函数始终在三次调用后重置计数器吗?或者你想让调用者在任意时间重置计数?
如果是前者,你可以这样做:
void func() {
static int x = 0;
printf("%d\n", x);
x = (x + 1) % 3;
}
如果是后者,使用本地静态变量可能是一个糟糕的选择;你可以使用以下设计:
class Func
{
int x;
// disable copying
public:
Func() : x(0) {}
void operator() {
printf("%d\n", x);
x = x + 1;
}
void reset() {
x = 0;
}
};
Func func;
你应该使它不可复制,以避免两个对象增加两个不同的计数器(或使它成为单例),或使计数器成为静态成员,以便每个对象递增相同的计数器。现在你像这样使用它:
int main(int argc, char * const argv[]) {
func(); // prints 0
func(); // prints 1
func(); // prints 2
func.reset();
return 0;
}
答案 1 :(得分:0)
你做不到。它是一个局部静态变量,在func()
之外是不可见的。
您可以使用:
答案 2 :(得分:0)
您可以func()
将变量的地址指定给从func()
外部可见的指针。
或者您可以将一个特殊参数传递给func()
,告诉它重置变量。
但实际上,在x
内声明func()
的重点是让它仅在func()
的正文中可见。如果您希望能够修改x
,请在其他位置定义它。既然你正在编写C ++,那么x
成为某个类的静态成员可能是有意义的。