初期化リストで外側の中括弧を省略する場合
C では、構造体や配列などの集約型を初期化するときに、初期化子リストで外側の中括弧を使用するかどうかの問題です。 POD (Plain Old Data) であり、std::array などのユーザー定義コンストラクターを持たない集約型の場合は、外側の中かっこが必要です。ただし、組み込み型など、この制限がない集約の場合、これらの中括弧は省略できます。
POD 集約の明示的な中括弧
この例では、 std::array std::array は集約であり POD 型であるため、a1 には明示的な中括弧が必要です。集合体の最初のメンバーはサイズ N の配列で、N はテンプレート引数として渡されます。このメンバーを直接初期化するには、内部配列に追加の中括弧を使用する必要があります。間違ったコード例:
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
内中括弧が欠落しているため、コンパイラーは「初期化子が多すぎます」と報告します。中かっこを使用した正しい初期化は次のとおりです。
std::array<A, 2> a1 = { {{ {0, 0.1}, {2, 3.4} }} };
非 POD 集合体の中括弧の省略
POD 集合体とは対照的に、非 POD 集合体は組み込み型と同様です初期化子リストに明示的な外側中括弧を必要としません。たとえば、次の例:
std::array<double, 2> a2 = {0.1, 2.3};
には、内部配列の中括弧が含まれていません。これは、double が集合体ではなく、初期化子リストが構成要素である double 要素を直接初期化するためです。
標準からの追加の洞察
C 標準では、次の場合に関するガイダンスが提供されています。初期化子リストでは外側の中括弧を省略できます:
これにより、両方の中かっこを使用した初期化が可能になります。また、initializer-clause の数が初期化されるメンバーの数と一致する限り、中括弧は不要です。
以上がC 初期化子リストで外側の中括弧を省略する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。