この場合、静的変数のインスタンスは1つまたは0つだけである必要があります。f()
呼び出されたかどうかによって異なります。
void f()
{
static int a;
}
しかし、メソッドがある場合、静的変数のインスタンスはいくつありますf()
か?
class A
{
void f()
{
static int a;
}
};
この場合、静的変数のインスタンスは1つまたは0つだけである必要があります。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
変数は基本クラスと派生クラスごとに異なります(関数も異なるため)。
同じ...メンバー関数であることは、静的ローカルであることと直交しています。