23

static関数ではなく.cppファイルのグローバルスコープにある場合に、変数にフラグを立てる用途はありますか?

関数にもstaticキーワードを使用できますか?はいの場合、それらの用途は何ですか?

4

3 に答える 3

20

はい、ファイル スコープ変数を宣言する場合は、staticキーワードが必要です。staticある翻訳単位で宣言された変数は、別の翻訳単位から参照できません。


ちなみに、staticキーワードの使用は C++03 では非推奨です。

C++ 標準 (2003) のセクション $7.3.1.1/2 には、次のように書かれています。

名前空間スコープでオブジェクトを宣言する場合、 static キーワードの使用は非推奨です。名前のない名前空間は優れた代替手段を提供します。

C++ は、キーワードよりも名前のない名前空間を優先します。static次のトピックを参照してください。

静的よりも名前のない名前空間の優位性?

于 2011-01-18T14:32:53.300 に答える
18

この場合、キーワード static は、関数または変数が同じ cpp ファイル内のコードでのみ使用できることを意味します。関連するシンボルはエクスポートされず、他のモジュールで使用できません。

これは、グローバル関数または変数が他のモジュールで必要ないことがわかっている場合に、大規模なソフトウェアで名前の競合を回避するための良い方法です。

于 2011-01-18T14:32:44.520 に答える
1

例として -

// 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();                   
}

どちらも、プログラムが終了/終了したときにのみ存在しなくなります。

于 2011-01-18T14:43:02.943 に答える