ホームページ >バックエンド開発 >C++ >`std::array` および同様の集合体の C 初期化子リストで外側の中括弧が必要になるのはどのような場合ですか?

`std::array` および同様の集合体の C 初期化子リストで外側の中括弧が必要になるのはどのような場合ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 03:17:18792ブラウズ

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

初期化子リストで外側の中括弧を省略できない場合

C では、特定の種類の集合構造、特に Plain Old Datatype (POD) であるか、ユーザー定義のコンストラクターが欠如している構造。標準ライブラリのほとんどのコンテナとは異なり、std::array はこのカテゴリに分類されます。

中かっこを使用した std::array の初期化

次の例を考えてみましょう:

std::array<A, 2> a1 = 
{
    {0, 0.1},
    {2, 3.4}
};

ここで、A は 2 つのデータ メンバーを持つ構造体です。 {0, 0.1}、{2, 3.4} を囲む追加の中括弧のセットは、std::array の内部配列を初期化するため必須です。これらがないと、コンパイラは「初期化子が多すぎます」エラーを報告します。

配列の直接初期化

この動作は、配列の直接初期化に似ています。

Aarray a1 =
{
    {0, 0.1},
    {2, 3.4}
};

ここでは、Aarray 構造体の内部配列データが直接初期化されています。外側の中かっこがないと、コンパイラは std::array の場合と同じエラーが発生します。

スカラー型との比較

double のようなスカラー型の配列を初期化する場合、スカラー型は集合体ではないため、外側の中括弧はオプションです。例:

std::array<double, 2> a2 = {0.1, 2.3};

この場合、配列のデータ メンバーはすでに初期化子リスト {0.1, 2.3} によって直接初期化されているため、追加の中括弧は必要ありません。

以上が`std::array` および同様の集合体の C 初期化子リストで外側の中括弧が必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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