ホームページ > バックエンド開発 > C++ > C クラス内で非定数の静的メンバー変数を初期化できないのはなぜですか?

C クラス内で非定数の静的メンバー変数を初期化できないのはなぜですか?

Barbara Streisand
リリース: 2024-12-17 10:56:24
オリジナル
645 人が閲覧しました

Why Can't I Initialize Non-Constant Static Member Variables Within a C   Class?

非定数静的メンバーのクラス内初期化の禁止を理解する

C で、 static などの初期値を持つパブリック静的変数を定義しようとすると、 int j=0; はコンパイル エラーを引き起こします。これは、非定数静的メンバー変数のクラス内初期化を禁止する ISO C の基本的な規則によるものです。

禁止の根拠

このような変数が暗黙的に初期化される C とは異なります。ゼロにすると、C では初期化されないままにすることが義務付けられます。この区別は、静的メンバーの値がクラスのすべてのインスタンスにわたって一貫性を保つことを保証する参照透過性の原則に由来しています。クラス内初期化を許可すると、この原則が損なわれ、変数値の不一致が生じる可能性があります。

定数静的メンバーの初期化

非定数メンバーとは対照的に、定数静的メンバーは初期化が許可されています。初期化後に値を変更できないため、クラス内にあります。これは、これらのメンバーが存続期間を通じて一貫した値を維持することを意味します。

静的変数初期化の影響

クラス内初期化の禁止は、C の静的変数が自動的に 0 で初期化されないことを意味します。代わりに、プログラム内の他の場所で値が明示的に割り当てられるまで、初期化されないままになります。

での適切な初期化C

C で静的変数を適切に初期化するには、以下のコード スニペットに示すように、ヘッダー ファイルで静的変数を定義し、別の .cpp ファイルで初期値を割り当てる必要があります。

// Header file
class Test {
public:
  static int j;
};

// .cpp file
// Initialize static variables
int Test::j = 0;
ログイン後にコピー

このアプローチに従うことで、静的変数がすべてのクラス インスタンスにわたって適切かつ一貫して初期化されることを保証できます。

以上がC クラス内で非定数の静的メンバー変数を初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート