10

静的変数は何のために設計されていますか?static intとintの違いは何ですか?

4

3 に答える 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 に答える