配列を含む集合体のあいまいな初期化子構文
C では、配列を含む集合体を初期化するときに中括弧を省略すると、混乱やエラーが発生する可能性があります。これは、次の例で明らかです。
// Error: Too many initializers std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} }; // Valid std::array<double, 2> a2 = {0.1, 2.3};
構造体の std::array には中かっこが必要です
最初の例では、std::array が次のとおりであるため、エラーがスローされます。集約であり、ユーザー定義のコンストラクターがありません。修正バージョンに見られるように、内部配列の初期化には明示的な中括弧が必要です。
std::array<A, 2> a1 = { {{0, 0.1}, {2, 3.4}} };
POD の std::array には中括弧は不要
対照的に、 std::array
集計の一貫性
集約メンバーに中括弧を必要とする原則は、他のタイプの集約にも適用されます。よく:
// Valid B meow1 = {1, 2}; B bark1 = {{1, 2}}; C meow2 = {1, 2}; C bark2 = {{1, 2}};
D のあいまいさ
ただし、次の例ではエラーが発生します:
// Error: Too many initializers D meow3 = {{1, 2}, {3, 4}}; D bark3 = {{{1, 2}, {3, 4}}};
D では、初期化子foo 自体が配列であるためです。 meow3 の中括弧は、foo の初期化またはその内部配列のいずれかを参照している可能性があるため、あいまいです。曖昧さを解決するには、bark3 のように、明示的に中かっこが必要です。
集合体の初期化メカニズム
集合体の初期化で中かっこが省略される場合、いくつかのルールが適用されます。
追加の例
以上が配列を使用した C 集計の初期化で中括弧を使用する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。