Mar*_*dik 6 c++ static static-methods static-members
在这种情况下,静态变量应该只有一个或零个实例.这取决于是否f()被召唤.
void f()
{
static int a;
}
Run Code Online (Sandbox Code Playgroud)
但是如果f()是一个方法,那么静态变量有多少个实例呢?
class A
{
void f()
{
static int a;
}
};
Run Code Online (Sandbox Code Playgroud)
与函数相同:0 或 1。检查也很容易:
class A
{
public:
void f()
{
static int a = 0;
++a;
cout << a << endl;
}
};
int main()
{
A a;
a.f();
a.f();
A b;
b.f();
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
Run Code Online (Sandbox Code Playgroud)
但是,如果您像这样派生class A并使其成为虚拟函数:
class A
{
public:
virtual void f()
{
static int a = 0;
++a;
cout << a << endl;
}
};
class B:public A
{
public:
void f()
{
static int a = 0;
++a;
cout << a << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
那么a基类和每个派生类的变量将不同(因为函数也不同)。