static variable inside member function of base class
我有以下几点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class base { public void f(); ... } void base::f() { static bool indicator=false; ..... if(!indicator) { ... indicator=true; } } class D:public base { ... } |
在我的主()中,我有:
1 2 3 4 5 6 7 8 9 10 | main() { // first instance of D base *d1 = new D(); d1->f(); .... // 2nd instance of D base *d2 = new D(); d2->f(); } |
我发现第一次实例化并调用d1->f()时,静态变量设置为false。但是第二次我调用d2->f()时,代码甚至没有碰到"static bool indicator=false"这一行;它保持为true(从d1-f()的第一次传递开始),这正是我想要的行为,但我不理解为什么会发生这种情况。有人能解释一下发生了什么事吗?提前谢谢
成员函数中声明的静态变量将在函数调用之间保留其值。所有实例上只有一个副本,不同实例对
有关详细信息,请参见此处:成员函数中的静态变量
此外,此代码不会切换
1 2 3 4 5 | if(!indicator) { ... indicator=true; } |
这正是在函数块中声明的静态变量的行为。自从C语言引入这个特性以来,就一直是这样。
The static declaration can also be applied to internal variables. Internal static variables are local to a particular function just as automatic variables are, but unlike automatics, they remain in existence rather than coming and going each time the function is activated. (K&R, page 61).
静态初始值设定项在第一次调用包含函数之前执行。由于是静态的,变量在调用期间保持其最后状态。