6

在这种情况下,静态变量应该只有一个或零个实例。这取决于是否f()已被调用。

void f() 
{
    static int a;
}

但是如果f()是一个方法,那么有多少个静态变量的实例呢?

class A
{
    void f()
    {
        static int a;
    }
};
4

2 回答 2

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变量对于基类和每个派生类都是不同的(因为函数也不同)。

于 2012-07-06T05:31:24.190 回答
2

相同...作为成员函数与作为静态本地函数是正交的。

于 2012-07-06T05:30:09.200 回答