6

この場合、静的変数のインスタンスは1つまたは0つだけである必要があります。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 に答える