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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-21 00:49:13596ブラウズ

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in C  ?

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

C では、集合体の初期化は、クラスまたはクラスのメンバーを初期化するための便利な構文です。明示的にコンストラクターを呼び出さずに構造体を作成します。ただし、クラス内メンバー初期化子を使用すると、クラス/構造体が集合体のままであるかどうかという問題が生じます。

C 11 および集合体ステータス

C によると11 標準では、クラス内メンバー初期化子があると、クラス/構造体が集合体とみなされなくなります。これは、メンバー初期化子がユーザー定義のコンストラクターに似ており、集約では使用できないためです。

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

A a{0, 1}; // Invalid for C++11

C 14 および集約の初期化

ただし、 C 14 では、この制限は解除されました。非静的メンバー初期化子を持つクラス/構造体に対して集約の初期化が許可されるようになりました。この変更は、開発者のフィードバックに対処し、集約の初期化を理解しやすくするために行われました。

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

A a{0, 1}; // Valid for C++14

G C 14 集約のサポート

G バージョン 5.0 以降であることに注意してください。非静的メンバー初期化子を使用したクラス/構造体の C 14 集合体初期化をサポートします。ただし、古いバージョンの G はこの構文を認識できない可能性があります。

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

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