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

How many instances are there, of static variables declared in a method?

本文关键字:多少 实例 变量 静态 声明 方法      更新时间:2023-10-16

在这种情况下,静态变量应该只有一个或零个实例。这取决于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变量将不同(因为函数也不同)。

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