静的変数はクラス以外のC++のどこにでも存在できますか?もしそうなら、彼らはどのような行動をしますか?オブジェクトがないのでインスタンス間で共有されていないと仮定します。C++では静的変数をクラスから解放することはできますか?
答えて
はい。
静的オブジェクトの有効期間はプログラムの有効期間であり、変数がファイルスコープで宣言されている場合はオブジェクト内部のリンケージとなります(ブロックスコープで定義されている場合はリンケージはありません)。
関数の外では、staticはそのコンパイル単位のローカルを意味します。匿名の名前空間でも同じ効果を得ることができます。
確かには、当然のことながら、例えば:だから
int sequence()
{
static int result = 0;
return ++result;
}
、ここでは、結果変数は、関数のスコープ外に存在し、常にあなたが関数を入力するたびに増加していきます。
二つの他の場所:
グローバル変数と
- グローバル
static
変数(または関数)関数は、そのコンパイル単位に対してローカルであり、他のコンパイル単位 から「見た」ことはできません
- グローバル
ローカル変数
static
ローカル変数は宣言が初めて渡されたときに一度だけ初期化されます(これは関数が呼び出されたときにのみ実行するのに便利です)。その後、関数が返された後でも値は保持されますそしてstatic
のこれらの異なる用途が本当にお互いに何の関係もないことを改めて
ノートと呼ばれます。 static
は、使用する場所によって異なるものを意味します(const
のように)。
静的変数の意味によって異なります。 static
キーワードは、使用している状況によって異なるセマンティクスを持ちます。
メンバー変数は、静的として宣言された場合、静的な記憶期間を持ちます。これは、これらの変数の存続期間がプログラムの期間続くことを意味します。これは「静的変数」の共通の意味です。変数は静的記憶域期間を持つことになり、その下3例がある:static
キーワードがローカル(関数スコープ)変数で使用され
- 。
static
キーワードがクラスメンバー変数に適用されている場合。- 動的またはスレッド記憶期間を持たず、ローカル変数ではない変数。
例:
struct foo
{
static int x; // This has static storage duration
};
void bar()
{
static int y = 5; // This has static storage duration
}
int z = 1; // This has static storage duration
それがあったかのように、あなたの質問に答えるためには、「?ときに、クラスのないメンバー変数は静的記憶域期間を持つことができます」、答えはイエスです。グローバルまたは名前空間のスコープ変数は、デフォルトでは静的な記憶期間を持ちます。 staticとして宣言された関数スコープ変数には、静的な記憶期間もあります。
しかし、static
キーワードは、グローバルまたは名前空間のスコープ内の変数で使用される場合、別の意味を持ちます。これらの場合、static
は変数に内部リンケージがあることを指定します。つまり、同じ翻訳単位内でのみ参照することができます。
例:
static int i = 5; // This has internal linkage
- 1. Cで静的変数と自動変数を解放()できますか?
- 2. 静的クラスを変数に割り当てることはできますか?
- 3. 非静的変数これは静的コンテキストから参照することはできません
- 4. C#で静的関数内で非静的関数を呼び出すことはできますか?
- 5. 静的クラス関数[C++]で 'using'宣言を使用することはできますか?
- 6. sqlite3_column_textからポインタを解放することができるSqlite c/C++ api
- 7. メンバー関数内で静的変数を作成できますか?そのクラスのインスタンス内では静的変数のみが使用できますか?
- 8. 外部クラスを静的として定義し、内部静的クラスを囲むことはできますか?
- 9. 簡単な質問:非静的関数がCで静的変数を変更することができ++
- 10. サブクラスはC++で親クラスの静的変数を共有していますか?
- 11. 目的C - グローバルな静的変数はどこでdeallocしますか?
- 12. C++でそのクラス内の静的クラス(シングルトン)インスタンスへの参照を返すことはできますか?
- 13. C#の静的変数と動的変数の違いは何ですか?
- 14. 静的なクラスとメソッドは悪いですか?グローバル変数はぶつかる?
- 15. 静的クラスに非静的メソッドと変数を使用できないのはなぜですか?
- 16. 静的関数から非静的フィールドを参照することはできません。
- 17. iPhoneでこのインスタンス変数を解放しますか?
- 18. x86_64上でスタックメモリをrbpから引くことで解放できますか?
- 19. C言語でメモリを解放することはできません
- 20. 静的初心者:静的なクラス/メソッド内の静的でない変数は静的なことを暗示していますか?
- 21. クラスと派生クラスのインスタンスは、非静的メソッドを介して間接的にクラスの静的メンバーを変更することができます。#
- 22. Mockito:、私はmockitoから何かを(静的または非静的メソッド)模擬することができません静的&非静的メソッド
- 23. ガベージコレクタと静的クラス、変数
- 24. 関数内静的変数と静的クラス変数の比較
- 25. 静的メソッドのみを持つクラスは静的であるべきですか?
- 26. Workerスレッドから静的クラスインスタンスの静的メソッドを呼び出すことはできますか?
- 27. 異なるクラスライブラリから静的クラスを呼び出すことはできませんか?
- 28. 非静的メソッドisGooglePlayServicesAvailableとgetErrorDialogを静的コンテキストから参照することはできません
- 29. なぜ静的クラスは静的メンバーのみを持つことができますか?
- 30. Javaでは、(静的に)コンストラクタまたはローカル変数をインポートできますか?
あなたはdownvote場合は、理由を言う - そして、私は質問を向上させることができます。それは一種のポイントです。 – SirYakalot