2017-05-19 6 views
0

この質問のバリエーションは以前にも同様に質問されている可能性があります。この質問は静的データメンバ対グローバル変数ではなく、静的変数とグローバル変数です。静的データメンバーとグローバル変数の差

私たちは皆、静的なデータメンバーとグローバル変数が何をするのか知っています。コンパイラがそれらをリンクする方法、メモリレイアウトにマップされる場所、デフォルト値など。私がそれらについて考えるとき、globa変数の代わりに静的データメンバを使うべきシナリオの明確なイメージはありません。

私はあなたのクラスのために作成されたオブジェクトの数をカウントしたい1ユースケースを考えました。 1つの静的データメンバーを作成し、新しいオブジェクトを作成するたびにctorを増やします。しかし、同じ考えで、同じことをして、作成されたオブジェクトを数え、グローバル変数もカウントすることができます。

だから、それはグローバル変数対静的データメンバを使用しての使用例は何であることを今まで私には明確ではないでしょうか?誰でも、光を当ててください。

+1

「この質問は、グローバル変数対グローバル変数ではない静的変数対静的データメンバーについてです。」 - 何? – KonstantinL

+1

独自の例では、他のコードはグローバル変数を変更して誤った結果を出す可能性があります。これは、構成の数が不正確になる可能性があることを意味します。適切にカプセル化された静的データメンバーには、その状態を制御するような問題はありません。 – user2296177

+0

キーワード:名前空間とアクセス権。 – KonstantinL

答えて

2

それらが異なるスコープ内にある:

  • staticデータ部材が視認制限public/protected/privateを有することができます。
  • グローバル変数は無制限に変更できます
  • static(グローバル)変数はファイルスコープ内でしか変更できません。
関連する問題