C で、 static などの初期値を持つパブリック静的変数を定義しようとすると、 int j=0; はコンパイル エラーを引き起こします。これは、非定数静的メンバー変数のクラス内初期化を禁止する ISO C の基本的な規則によるものです。
このような変数が暗黙的に初期化される C とは異なります。ゼロにすると、C では初期化されないままにすることが義務付けられます。この区別は、静的メンバーの値がクラスのすべてのインスタンスにわたって一貫性を保つことを保証する参照透過性の原則に由来しています。クラス内初期化を許可すると、この原則が損なわれ、変数値の不一致が生じる可能性があります。
非定数メンバーとは対照的に、定数静的メンバーは初期化が許可されています。初期化後に値を変更できないため、クラス内にあります。これは、これらのメンバーが存続期間を通じて一貫した値を維持することを意味します。
クラス内初期化の禁止は、C の静的変数が自動的に 0 で初期化されないことを意味します。代わりに、プログラム内の他の場所で値が明示的に割り当てられるまで、初期化されないままになります。
C で静的変数を適切に初期化するには、以下のコード スニペットに示すように、ヘッダー ファイルで静的変数を定義し、別の .cpp ファイルで初期値を割り当てる必要があります。
// Header file class Test { public: static int j; }; // .cpp file // Initialize static variables int Test::j = 0;
このアプローチに従うことで、静的変数がすべてのクラス インスタンスにわたって適切かつ一貫して初期化されることを保証できます。
以上がC クラス内で非定数の静的メンバー変数を初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。