C の領域では、静的データ メンバーはクラス内に存在しますが、その境界を越えるため、外部での定義が必要です。クラス自体。 IBM の C ナレッジ センターで確認されているように、「クラスのメンバー リスト内の静的データ メンバーの宣言は定義ではありません... [それは] クラス宣言の外側、名前空間スコープ内で静的メンバーを定義する必要があります。」なぜこのルールが適用されるのでしょうか?この実践を必要とする根本的なメモリ割り当ての考慮事項は何ですか?
この義務の背後にある教訓は、言語の基本的な「単一定義ルール」にあります。この規則は、プログラム内で使用されるすべての静的オブジェクトが、正確に 1 つの定義を持たなければならないことを規定しています。クラス定義は通常ヘッダー ファイルに格納され、複数の翻訳単位 (ソース ファイル) に組み込まれることがよくあります。静的オブジェクトの宣言がヘッダー内に配置されている場合、含まれる各ユニットは個別の定義となり、単一定義ルールに直接違反します。
この危険を回避するために、ヘッダー内のクラス定義は、静的データ メンバーを定義せずに単に宣言するだけです。 。これにより、プログラマは別の場所で明示的な定義を行う必要があります。インライン関数の場合と同様に、言語では複数の定義を 1 つに統合することは理論的には可能ですが、静的データ メンバーの場合はそうではありません。したがって、静的データ メンバーの外部定義に対する言語の要件が残ります。
以上がC の静的データ メンバーをクラスの外で定義する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。