【发布时间】:2013-02-08 19:20:36
【问题描述】:
我有以下几点:
class base
{
public
void f();
...
}
void base::f()
{
static bool indicator=false;
.....
if(!indicator)
{
...
indicator=true;
}
}
class D:public base
{
...
}
在我的 main() 中,我有:
main()
{
// first instance of D
base *d1 = new D();
d1->f();
....
// 2nd instance of D
base *d2 = new D();
d2->f();
}
我发现第一次实例化 D 并调用 d1->f() 时,静态变量设置为 false。但我第二次调用 d2->f() 代码甚至没有命中“静态布尔指标=假”行并且它保持为真(从 d1-f() 的第一遍开始)这正是我想要的行为,但我不明白为什么会这样。有人可以解释发生了什么。在此先感谢
【问题讨论】:
-
按照设计,初始化程序只对函数中的静态变量运行一次。如果您不想要这种行为,那么您只需将变量声明为非静态。重点是通过多次调用函数来保持值。
标签: c++ inheritance static