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

C の静的メンバー変数がクラス定義の外で初期化されるのはなぜですか?

DDD
リリース: 2024-12-03 18:11:23
オリジナル
403 人が閲覧しました

Why are C   Static Member Variables Initialized Outside the Class Definition?

C での静的メンバー変数の初期化

C では、静的メンバー変数はクラス定義の外で初期化されます。この設計上の選択により、その論理的推論と潜在的なレガシーへの影響に関して疑問が生じています。

外部初期化の理由

静的メンバーは、遵守するために 1 つの変換単位内で定義する必要があります。 1 つの定義ルール。クラス内で初期化が許可されている場合、ヘッダー ファイルが含まれる異なる翻訳単位で複数の定義が発生する可能性があります。

次のコード スニペットを考えてみましょう。

struct Gizmo
{
  static string name = "Foo";
};
ログイン後にコピー

名前がクラス内で初期化される場合、その名前はヘッダー ファイルを含む各翻訳単位で定義されます。これは、単一定義ルールに違反します。

Integral static Members

C では、宣言内で整数静的メンバーの初期化が可能です。ただし、1 定義ルールを満たすには、単一の翻訳単位内に外部定義が必要です。これは構文上のショートカットとして機能します。

struct Gizmo
{
  static const int count = 42;
};
ログイン後にコピー

初期化で使用される式が const 整数型または列挙型である限り、コンパイル時に評価でき、定義が単一の翻訳単位に存在する限り、このアプローチは有効です。例:

gizmo.cpp

#include "gizmo.h"

const int Gizmo::count;
ログイン後にコピー

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

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