在这种情况下,静态变量应该只有一个或零个实例。这取决于是否f()
已被调用。
void f()
{
static int a;
}
但是如果f()
是一个方法,那么有多少个静态变量的实例呢?
class A
{
void f()
{
static int a;
}
};
在这种情况下,静态变量应该只有一个或零个实例。这取决于是否f()
已被调用。
void f()
{
static int a;
}
但是如果f()
是一个方法,那么有多少个静态变量的实例呢?
class A
{
void f()
{
static int a;
}
};
与函数相同: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
变量对于基类和每个派生类都是不同的(因为函数也不同)。
相同...作为成员函数与作为静态本地函数是正交的。