ホームページ >バックエンド開発 >C++ >C クラスで静的メンバーと配列を直接初期化できないのはなぜですか?

C クラスで静的メンバーと配列を直接初期化できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 06:08:11733ブラウズ

Why Can't I Initialize Static Members and Arrays Directly in a C   Class?

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

C では、静的データクラス内のメンバーは、特定の例外を除き、クラス定義内で直接初期化できません。

非定数静的メンバーの初期化を制限する理由

静的データ メンバーはプログラムのメモリ セグメントに割り当てられ、プログラムのすべてのインスタンス間で共有されます。クラス。 C 標準では、複数の翻訳単位で同じ変数が複数定義されることを防ぐために、クラス内初期化を禁止しています。

静的配列の初期化を制限する理由

同様に、配列は連続したメモリ ブロックを占有するため、クラス内の静的配列をクラス内で初期化することはできません。クラス内初期化を許可すると、各翻訳単位で同じ配列の複数のコピーが作成され、予期しない動作が発生します。

Const Integral および Enum Types の例外

静的 const 整数型と列挙型については、これらの規則の例外が設けられています。これらの型はコンパイル時の定数として扱われ、その値はコンパイル時に既知であるため、クラス内で初期化できます。

配列初期化の回避策

クラス内の静的配列を初期化するには、「列挙トリック」を使用できます:

enum { arrsize = 2 };

static const int c[arrsize] = { 1, 2 };

このアプローチでは、列挙型定数 arrsize を宣言して配列サイズを決定し、これを初期化に使用します。静的 const 配列 c.

C の進化11

C 11 では、これらの制限が若干緩和されました。 「リテラル型」として知られる特定の型の静的データ メンバーは、中括弧または等号初期化子を使用してクラス内で初期化できるようになりました。さらに、C 11 では、定数式を使用して非静的データ メンバーをクラス内で初期化できます。

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

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