static
関数ではなく.cppファイルのグローバルスコープにある場合に、変数にフラグを立てる用途はありますか?
関数にもstaticキーワードを使用できますか?はいの場合、それらの用途は何ですか?
static
関数ではなく.cppファイルのグローバルスコープにある場合に、変数にフラグを立てる用途はありますか?
関数にもstaticキーワードを使用できますか?はいの場合、それらの用途は何ですか?
はい、ファイル スコープ変数を宣言する場合は、static
キーワードが必要です。static
ある翻訳単位で宣言された変数は、別の翻訳単位から参照できません。
ちなみに、static
キーワードの使用は C++03 では非推奨です。
C++ 標準 (2003) のセクション $7.3.1.1/2 には、次のように書かれています。
名前空間スコープでオブジェクトを宣言する場合、 static キーワードの使用は非推奨です。名前のない名前空間は優れた代替手段を提供します。
C++ は、キーワードよりも名前のない名前空間を優先します。static
次のトピックを参照してください。
この場合、キーワード static は、関数または変数が同じ cpp ファイル内のコードでのみ使用できることを意味します。関連するシンボルはエクスポートされず、他のモジュールで使用できません。
これは、グローバル関数または変数が他のモジュールで必要ないことがわかっている場合に、大規模なソフトウェアで名前の競合を回避するための良い方法です。
例として -
// At global scope
int globalVar; // Equivalent to static int globalVar;
// They share the same scope
// Static variables are guaranteed to be initialized to zero even though
// you don't explicitly initialize them.
// At function/local scope
void foo()
{
static int staticVar ; // staticVar retains it's value during various function
// function calls to foo();
}
どちらも、プログラムが終了/終了したときにのみ存在しなくなります。