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

Mar*_*dik 6 c++ static static-methods static-members

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

void f() 
{
    static int a;
}
Run Code Online (Sandbox Code Playgroud)

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

class A
{
    void f()
    {
        static int a;
    }
};
Run Code Online (Sandbox Code Playgroud)

Sin*_*all 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();
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

但是,如果您像这样派生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;
    }
};
Run Code Online (Sandbox Code Playgroud)

那么a基类和每个派生类的变量将不同(因为函数也不同)。