ホームページ >バックエンド開発 >C++ >クラス内メンバー初期化子を持つクラスは、C では依然として集合体ですか?

クラス内メンバー初期化子を持つクラスは、C では依然として集合体ですか?

DDD
DDDオリジナル
2024-11-09 07:18:02513ブラウズ

Is a Class with In-Class Member Initializers Still an Aggregate in C  ?

C 11 非静的メンバー初期化子を持つクラスの集合体の初期化

クラス内メンバー初期化子の使用は、クラスの動作に大きな影響を与える可能性があります。 C.具体的には、このような状況下でクラスが集合体のままであるかどうかという問題が生じます。

C 11 では、クラス内メンバー初期化子に重大な制限が導入されています。つまり、クラスまたは構造体の集合体としての分類が禁止されています。これは、ドラフト C 11 標準で明らかであり、集約を「ユーザー提供のコンストラクター、非静的データ メンバーの中括弧または等価初期化子、プライベートまたは保護された非静的データ メンバー、および非静的データ メンバーを持たないクラス」と定義しています。基本クラスがあり、仮想関数はありません。」クラス内初期化子を導入すると、クラスはユーザー定義のコンストラクターと同様になり、集約ステータスが失われます。

ただし、この制限は C 14 で解除されました。メンバー初期化子は、クラスがクラスとみなされることを妨げなくなりました。この制限を取り除くために規格が改訂されたためです。この変更は、メンバー初期化子を持つ集合体に対する制限を削除することを提案した N3605 で詳しく説明されています。

この変更の理論的根拠は、メンバー初期化子がユーザー定義のコンストラクターと同等ではないという認識から生じました。これらはいくつかの類似点を共有していますが、メンバー初期化子は、オブジェクトを初期化する軽量かつ効率的な方法である集約初期化の概念により密接に連携しています。

結論として、C 11 では、クラス内メンバーです。初期化子はクラスを集約ステータスから除外していましたが、この制限は C 14 で削除され、クラス初期化の柔軟性が向上しました。

以上がクラス内メンバー初期化子を持つクラスは、C では依然として集合体ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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