ホームページ  >  記事  >  バックエンド開発  >  非静的メンバー初期化子を持つ C クラスは集合体になれますか?

非静的メンバー初期化子を持つ C クラスは集合体になれますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-10 03:58:02717ブラウズ

Can a C   class with non-static member initializers be an aggregate?

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

C 11 では、クラスまたは構造体は、次の場合に集合体とみなされます。ユーザー定義のコンストラクターがないこと、非静的に対する中括弧または等号の初期化子がないことなど、特定の基準を満たしていること

ただし、標準 C 11 では、非静的メンバー初期化子をクラスまたは構造体に追加すると、そのステータスが集合体として変更されます。これは、メンバー初期化子がユーザー定義のコンストラクターに似ており、クラスまたは構造体が集合体であることが認められないためです。この定義の変更により、予期しない動作が発生する可能性があります。

以下の例:

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

A a{0,1}; // ???

クラス内メンバー初期化子が存在するため、クラス A は集約とみなされなくなりました。その結果、集合体初期化 A a{0,1};は無効です。

この動作は C 14 で改訂され、非静的メンバー初期化子の存在によってクラスまたは構造体が集合体になることが妨げられなくなりました。したがって、C 14 では、A の集約初期化は有効です。

C 標準が変更されていることに注意することが重要であり、標準の最新バージョンを確認するか、準拠した C を使用することが重要です。 14 以降のコンパイラを使用すると、集合体の初期化と非静的メンバーの初期化子を含むコードが正しく解釈されます。

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

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