C では、static
次の 2 つの用途があります。
1、static
キーワードを使用して、翻訳単位内の var のスコープを制限します。これを簡単にするために、次の 2 つのファイルがありa.c
、次のb.c
ように記述したとします。
static int varA;
ina.c
の場合、これはin でvarA
のみ使用できることを意味します。 ina.c
を使用する場合は、キーワードを削除してinを追加する必要があります。人々が通常行うことは、: という別のファイルを作成し、 inを書き込み、単純に inにすることです。外部化したいすべての変数を記述し、単一のものを使用して、これらの変数または関数を他のファイル (つまり、ソース ファイル)で有効にすることができます。varA
b.c
static
extern int varA;
b.c
a.h
extern int varA;
a.h
include "a.h"
b.c
a.h
include "a.h"
.c
2、関数で astatic
を定義するために使用しlocal variable
ます。たとえば、次のようになります。
int TheFunction()
{
static int var = 0;
return ++var;
}
static
ローカル変数でキーワードを使用したためvar
、この変数は が返されても失われませんTheFunction()
。
最初に電話TheFunction()
すると1
、2 回目に電話TheFunction()
すると、というように続きます2
。
次に、C++ での static の使用法を見てみましょう。
どの C++ コンパイラも C コードをコンパイルできるため、上記の 2 つの使用法は C++ にも当てはまります。
別の 2 つの使用法は次のとおりです。1、静的メンバー変数。2、静的メンバー関数。
コードを直接見てみましょう:
#include <iostream>
using namespace std;
class Test
{
public:
Test() : m_nNormalVar(0)
{
}
public:
// You need to init this static var outside the class
// using the scope operator:
// int Test::m_nStaticVar = 0;
static int m_nStaticVar;
// You can init this const static var in the class.
const static int m_nConstStaticVar = 10;
// This is just a normal member var
int m_nNormalVar;
};
int Test::m_nStaticVar = 0;
int main(int argc, char *argv[])
{
Test a;
Test b;
a.m_nStaticVar++;
a.m_nNormalVar++;
cout << b.m_nStaticVar << endl;
cout << b.m_nNormalVar << endl;
return 0;
}
a
と同じb
クラスのオブジェクトですが、独自のこれは静的メンバー変数です。Test
m_nStaticVar
m_nConstStaticVar
m_nNormalVar
#include <iostream>
using namespace std;
class Utility
{
public:
// This is a static member function, you don't
// need to have a concrete object of this class
// to call this function.
static int SelectMax(int a, int b)
{
return a > b ? a : b;
}
};
int main(int argc, char *argv[])
{
// No objects of class Utility
cout << Utility::SelectMax(2, 1) << endl;
return 0;
}
したがって、これは C++ のクラスの静的メンバー関数です。
static のこれらの 4 つの使用方法は、私が知っているすべてです。他の使用法がまだある場合は、この投稿の編集を手伝ってください thx:)
編集:
静的グローバル関数を追加
1、static
キーワードを使用して、翻訳単位内の関数の範囲を制限します。これを簡単にするために、次の 2 つのファイルがありa.c
、次のb.c
ように記述したとします。
static void StaticFunction();
inであるため、 ina.c
のみを呼び出すことができます。この関数を in で呼び出したい場合は、キーワードを削除してから、使用前にそれを削除する必要があります。または、それを宣言するだけですStaticFunction()
a.c
b.c
static
a.h
include "a.h"
b.c