非静的メンバー初期化子を持つクラスの集合体初期化
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 サイトの他の関連記事を参照してください。