staticのC++の中のいくつかの情況
2199 ワード
1.グローバルおよびローカルの役割ドメインに存在する静的変数
1、staticで修飾されたグローバル変数は、本ファイルでのみ使用でき、他のファイルでは使用できません.
2、staticで修飾された局所変数は、関数体でのみ呼び出され、その関数を複数回呼び出す場合でも、1回だけ初期化されます.
2、クラス内に存在する静的データメンバー
関数内の静的変数と同様に、作成したオブジェクトは破棄されてもメモリに存在します.
3、クラスのメンバー関数に存在する
通常の関数の役割ドメインと同様に、効果もそれほど悪くありません.
4、グローバルな役割ドメインに存在する静的関数
本コンパイルユニット(現在のファイル)でのみ呼び出され、他のファイルでは呼び出されず、externによって修飾されない
5.クラスの静的メンバー関数に存在する静的データメンバー
(1)静的データ・メンバーは単独で初期化する必要があります.そうしないと、リンク・エラーを報告します.
(2)静的メンバー関数クラス内の非静的メンバー関数と非静的データメンバーを呼び出すことができない
(3)静的データは1部のみであり,オブジェクトに依存せずに存在する.
1、staticで修飾されたグローバル変数は、本ファイルでのみ使用でき、他のファイルでは使用できません.
2、staticで修飾された局所変数は、関数体でのみ呼び出され、その関数を複数回呼び出す場合でも、1回だけ初期化されます.
#include
using namespace std;
static int i = 0; //
void display()
{
static int j = 0;//
j++;
cout << "i = " << i << endl;
}
int main(void)
{
i++;
display(); //i=1;
display(); //j = 1;
display(); //j = 2;
return 0;
}
2、クラス内に存在する静的データメンバー
関数内の静的変数と同様に、作成したオブジェクトは破棄されてもメモリに存在します.
#include
using namespace std;
class A
{
public:
A(int a)
{
i = a;
}
private:
static int i; //
};
int A::i = 10; // , ,
int main(void)
{
A a(2);
return 0;
}
3、クラスのメンバー関数に存在する
通常の関数の役割ドメインと同様に、効果もそれほど悪くありません.
#include
using namespace std;
class A
{
public:
void display()
{
static int i = 0;
i++;
cout << i << endl;
}
private:
static int i; //
};
int main(void)
{
A a;
a.display();//i=1;
a.display();//i=2;
a.display();//i=3;
return 0;
}
4、グローバルな役割ドメインに存在する静的関数
本コンパイルユニット(現在のファイル)でのみ呼び出され、他のファイルでは呼び出されず、externによって修飾されない
#include
using namespace std;
static void display()
{
cout << "This is a static global func" << endl;
}
int main(void)
{
display();
display();
display();
return 0;
}
5.クラスの静的メンバー関数に存在する静的データメンバー
(1)静的データ・メンバーは単独で初期化する必要があります.そうしないと、リンク・エラーを報告します.
(2)静的メンバー関数クラス内の非静的メンバー関数と非静的データメンバーを呼び出すことができない
(3)静的データは1部のみであり,オブジェクトに依存せずに存在する.
#include
using namespace std;
class A
{
public:
static void display(); //
private:
static int a;
int b;
};
int A::a; //
void A::display()
{
cout << a << endl;
//cout << b << endl;
}
int main(void)
{
A a;
a.display();
return 0;
}