在方法中声明的静态变量有多少个实例?

时间:2012-07-06 05:27:40

标签: c++ static static-methods static-members

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

void f() 
{
    static int a;
}

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

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

2 个答案:

答案 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)

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