ホームページ > バックエンド開発 > C++ > C の静的メンバー変数をクラス宣言の外で初期化する理由

C の静的メンバー変数をクラス宣言の外で初期化する理由

Barbara Streisand
リリース: 2024-12-25 15:11:21
オリジナル
791 人が閲覧しました

Why Initialize C   Static Member Variables Outside the Class Declaration?

C での静的メンバー変数の初期化 : なぜクラスの外で行うのですか?

C では、静的メンバー変数はクラス宣言の外で初期化されます。より直観的なクラス内初期化からのこの逸脱は、開発者の間で好奇心を引き起こしました。この設計上の決定の背後に論理的な理由はありますか?

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

これを説明するために、次の例を考えてみましょう。

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

このコードが許可された場合、名前はこのヘッダー ファイルを含む各翻訳単位で定義されます。これは、変数が 1 つの定義のみを持つことを義務付ける 1 つの定義ルールと矛盾します。

ただし、C では、宣言内で整数の静的メンバーの初期化を許可する糖衣構文が提供されています。

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート