ホームページ >バックエンド開発 >C++ >非静的メンバー初期化子を持つクラスは C 14 で集約できますか?

非静的メンバー初期化子を持つクラスは C 14 で集約できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-29 03:50:13531ブラウズ

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

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

C 11 では、ユーザー定義のコンストラクターとプライベートを持つ構造体とクラスまたは保護された非静的データ メンバーは集計とみなされません。これまでは、ユーザー定義のコンストラクターが欠けていたとしても、非静的メンバー初期化子を持つクラスにも当てはまりました。

しかし、C 14 では、この制限は削除されました。現在、非静的メンバー初期化子を持つクラスは、集約の他の要件を満たしている限り、引き続き集約することができます。

  • ユーザー定義コンストラクターなし
  • プライベートまたは保護された非-static データ メンバー
  • 基本クラスなし
  • 仮想なし関数

例:

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

int main()
{
  A a{0, 1}; // This is now allowed in C++14
  return 0;
}

この変更は、集合体初期化の動作を直感に合わせたいという要望によって動機付けられました。クラス内初期化子は本質的にユーザー定義のコンストラクターと同等ですが、クラスが集合体になることを妨げるのは直観に反します。

G 5.0 以降、非静的データ メンバー初期化子を持つ C 14 集合体は、 std=c 1y または -std=c 14 を使用してサポートされます。

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

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