C 11 クラス内初期化: 過去の制限への対処
C 11 より前は、クラス内初期化は整数の静的 const メンバーに限定されていました。または列挙型。この制限は、複雑なリンカー ルールを回避し、各オブジェクトが一意の定義を持つようにする必要があることから生じました。
ただし、C 11 では、非静的メンバーと非定数メンバーのクラス内初期化を許可することにより、重要な変更が導入されました (§ 12.6.2/8)。この緩和はコンパイラの改善により可能となり、コンパイラは潜在的な複数の定義を整理する役割を担うようになり、より複雑なクラス宣言が可能になりました。
非静的データ メンバーの場合は、中かっこ-or-equal-イニシャライザは、オブジェクトの構築中に初期化するために使用できます。 Variant メンバーは明示的に指定されない限り初期化されませんが、初期化子が指定されていない場合はデフォルト初期化が実行されます。
非 const 静的メンバーのクラス内初期化も、constexpr 指定子 (セクション 9.4.2).
これらの変更により、クラス外のメンバーの必要性がなくなり、コードの単純さと効率が向上しました。イニシャライザ。ただし、異なるクラス コンストラクター内で重複する可能性のある初期化子を処理するための新しいルールも導入されています。たとえば、メンバー変数にクラス内初期化子があり、コンストラクター内でも初期化される場合、そのコンストラクターを使用するときにクラス内初期化子は無視されます。
要約すると、基礎となる実装の複雑さは変化しました。リンカーからコンパイラーに至るまで、C 11 のクラス内初期化により、クラス定義とメンバーの初期化機能が大幅に強化され、コードの可読性と柔軟性が向上します。
以上がC 11 はクラス内初期化をどのように強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。