C++: static inside functions
总结自:
如果在 global function 或是 member function 内部定义一个 static 的话,这个 static 只有在第一次函数调用后才会有定义。
如果第二次再调用这个 function 的话:
Compilers typically use a hidden flag variable to indicate if the local statics have already been initialized, and this flag is checked on every entry to the function.
local static 的初始化在 C++98 中并不是 thread-safe 的,C++11 requires that static initialization be thread safe.
#include <iostream>
using namespace std;
class A {
public:
void foo() {
static int i = 0;
cout << i++ << endl;;
}
};
int main() {
A o1, o2, o3;
o1.foo(); // output: 0
o2.foo(); // output: 1
o3.foo(); // output: 2
o1.foo(); // output: 3
cout << A::i << endl; // ERROR. 'i' is not a member of 'A'
}
需要注意的是,local static 本质上还是个 local,它并不会变成 global static 或是 class member。除非你 return i;
,否则其他地方都访问不到这个 i
。
Comments