静的グローバル変数と静的データ メンバー: 明確化
ヘッダー ファイルで定義された静的グローバル変数とヘッダー ファイル内で宣言された静的データ メンバーの区別授業が混乱する可能性があります。この記事は、それらの違いを明らかにすることを目的としています。
ヘッダー ファイルの静的グローバル変数
一般に信じられていることに反して、「ヘッダー ファイルのスコープ」などの概念はありません。 」ヘッダー ファイルがソース ファイルにインクルードされている場合、その内容は基本的にソース ファイルにそのままコピーされます。したがって、ヘッダー ファイルで宣言された静的グローバル変数は、それを含むすべての翻訳単位に存在します。
関数またはメンバー関数の静的変数に関連付けられた内部リンケージとは異なり、ヘッダー ファイルの静的グローバル変数には外部リンケージがあります。リンケージ。これは、翻訳単位の外部からアクセスできることを意味し、競合や混乱が生じる可能性があります。
クラス内の静的データ メンバー
対照的に、宣言された静的データ メンバーは、クラス内では異なるセマンティクスがあります。これは、そのクラスのすべてのインスタンス間で共有されます。静的データ メンバーは非クラス変換単位 (通常は .cpp ファイル) で初期化されますが、データ メンバーのスコープはプログラム全体のクラスのすべてのインスタンスに拡張されます。
Key相違点
ベスト プラクティス
経験則として、匿名名前空間を使用することはより効果的です。 C で内部リンケージを実現するための静的グローバル変数の堅牢な代替手段。
以上がC の静的グローバル変数と静的データ メンバーの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。