ホームページ >バックエンド開発 >C++ >C の静的メンバー変数の初期化がクラスの外部で行われる必要があるのはなぜですか?

C の静的メンバー変数の初期化がクラスの外部で行われる必要があるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 00:39:10537ブラウズ

Why Must Static Member Variable Initialization in C   Occur Outside the Class?

C の静的メンバー変数 : クラス外での初期化

直感に反するように思えるかもしれませんが、C の静的メンバー変数の初期化はクラスの外で行われます。いくつかの論理クラス

単一定義ルールへの準拠

静的メンバーは、単一定義ルールに従って、正確に 1 つの変換単位で定義する必要があります。クラス内で初期化が許可されている場合、異なる翻訳単位で同じ変数が複数定義されることになり、このルールに違反します。

例:

次のことを考慮してください。コード スニペット:

struct Gizmo {
  static string name = "Foo"; // Not allowed
};

この初期化が許可された場合、変数名はヘッダーを含むすべての翻訳単位で定義されます。

クラス内での初期化を許可する

クラス内での初期化を許可する方が直感的に見えるかもしれませんが、それでも別の定義が必要になります。 1 つの定義ルールが確実に適用されるようにするため。したがって、クラス内初期化を許可しても、実際の利点はなく構文が追加されるだけです。

整数値の代替

整数静的メンバーの場合、C では宣言内での初期化が許可されます。式が次の場合:

  • Const 整数または列挙type
  • コンパイル時に評価可能

これにより、1 行のコードで整数の静的メンバーを簡単に定義できる構文のショートカットが可能になります。ただし、別の翻訳単位での定義は依然として必要です。

例:

struct Gizmo {
  static const int count = 42; // Allowed
};

この場合、コンパイラは必要な定義をクラスの外で生成して、 1 つの定義ルールを遵守します。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。