静的変数は何のために設計されていますか?static intとintの違いは何ですか?
3 に答える
34
キーワードには4つのstatic
別々の用途があり、そのうち2つだけが密接に関連しています。
- グローバルスコープと名前空間スコープで静的(変数と関数の両方に適用)は、内部リンケージを意味します
- これは名前のない名前空間に置き換えられ、他の名前空間とは無関係です
- 特に、他のオブジェクトはある種の一意性を暗示する傾向がありますが、内部リンケージはその逆を意味します。それぞれに内部リンケージがあり、翻訳単位ごとに1つしかない限り、同じ名前のオブジェクトを多数持つことができます。
- 静的データメンバーは、クラスのすべてのインスタンス間で「共有」されます
- クラスインスタンスから独立しているようなものです
- これは静的メソッドでグループ化されることがあります
- 静的メソッドは現在のインスタンスで「動作」しません
- このポインタはありません。インスタンスなしで呼び出すことができます
- (関数内の)静的ローカル変数は、各関数呼び出しのスコープ全体で持続します
静的データメンバーと静的ローカル変数の両方が非表示のグローバル状態になる可能性があるため、慎重に使用する必要があります。
今、どちらが密接に関連していますか?それは2人のクラスメンバーではありません—グローバルな状態についての警告はそれを与えます。静的データメンバーは静的ローカル変数と見なすことができます。静的データメンバーが属する関数は、単一の関数ではなく、クラスのすべてのメソッドです。
関連する質問をたくさん見つけましたが、驚くべきことに、重複はありませんでした。
于 2010-01-03T16:47:10.227 に答える
4
静的変数は、スタックではなくデータセグメント(x86で、他のアーキテクチャに合わせて変更)で初期化されます。それらは、範囲外になると気化するのではなく、プログラムの存続期間中持続します。
于 2010-01-03T16:45:58.900 に答える
3
静的メンバーは、インスタンスなしで参照できます。
こちらの「静的メンバー」セクションを参照してください:http ://www.cplusplus.com/doc/tutorial/classes2/
于 2010-01-03T16:44:34.707 に答える