web-dev-qa-db-ja.com

C ++の静的グローバル識別子と非静的グローバル識別子の違いは何ですか?

C++のstaticグローバル識別子と非staticグローバル識別子の違いは何ですか?

29
Fahad Siddiqui

静的は、変数のスコープを同じ変換単位に制限します。
static global変数には内部リンケージがあります。
非静的グローバル変数には外部リンケージがあります。

グッドリード:
外部リンケージと内部リンケージとは何ですか?

31
Alok Save

グローバルstatic変数は、変数が含まれている変換単位(つまりソースファイル)でのみ使用できます。非静的グローバル変数は、他のソースファイルから参照できます。

違いがわからない場合は、正解するとさらに混乱する可能性があります。つまり、クラスのstaticsは、ファイルスコープの静的なものにはなりません。クラスの統計は基本的に通常の変数と同じですが、クラス名を前に付けて参照する必要があります。ファイルスコープの統計は、ファイルに対してのみローカルな通常の変数です。それが何を意味するのかを理解するには、同じ名前の2つの変数を1つのプロジェクトに追加してみてください。同一のシンボルが複数あるため、リンカーエラーが発生します。シンボルを静的にすることで、問題や変数の名前にファイルの外部からアクセスできないようにすることができます。

3
eric

グローバル非静的変数は他のファイルからアクセスできますが、静的グローバル変数はアクセスできません

2
Rahul Tripathi