C 14 では、メンバー初期化子を持つクラスを集合体にすることができますか?

DDD
リリース: 2024-11-09 14:33:02
オリジナル
595 人が閲覧しました

Can Classes with Member Initializers be Aggregates in C  14?

C 11 メンバー初期化子を使用したクラスの集合体初期化

C 11 では、クラスに中括弧を使用した集合体初期化が導入され、初期化子を指定できるようになりました。すべての非静的データ メンバー。ただし、C 11 の標準では、クラス内メンバー初期化子は集合体構造内に存在できますか?

C 11 では、クラス内にメンバー初期化子があると、構造体またはクラスが非集合体になります。この制限は、クラス内メンバーの初期化子がユーザー定義のコンストラクターと類似点を共有しているという考えに由来しています。ただし、メンバー初期化子を追加しても、自動的にクラスが集合体としての資格を剥奪されるべきではありません。

C 14 標準ではこの問題に対処し、ユーザー提供のコンストラクター (プライベートまたは保護された非静的コンストラクター) のみを除外するように集合体クラスの定義を変更しています。データ メンバー、基本クラス、仮想関数。不適格子としてのメンバー初期化子の包含は削除されました。

したがって、C 14 では、次のようなクラスは集約とみなされます:

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; 
ログイン後にコピー

C 11 では、上記はA は集計ではないため、コードは無効になります。ただし、C 14 では、コードは有効であり、オブジェクト a は a = 0 および b = 1 で初期化されます。

g の最近のバージョン (5.0 以降) は、C 14 の集計定義をサポートするようになりました。非静的メンバー初期化子。したがって、サンプル コードは -std=c 14 または -std=c 1y を使用して g でコンパイルされます。

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

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