在这种情况下,静态变量应该只有一个或零个实例。这取决于是否已调用f()
。
void f()
{
static int a;
}
但如果f()
是一种方法,那么静态变量有多少个实例?
class A
{
void f()
{
static int a;
}
};
答案 0 :(得分:4)
与功能相同: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();
}
输出:
1
2
3
但是,如果你从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;
}
};
然后a
变量对于基类和每个派生类都会有所不同(因为函数也不同)。
答案 1 :(得分:2)
相同的......作为成员函数与作为静态局部函数是正交的。