「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C ++アグリゲートタイプの初期化リストには、外側のブレースが必要なのはいつですか?

C ++アグリゲートタイプの初期化リストには、外側のブレースが必要なのはいつですか?

2025-04-14に投稿されました
ブラウズ:868

When are Outer Braces Necessary in C   Initializer Lists for Aggregates?

congization ofgerizerリストの外側のブレースを省略することについての混乱

cプログラミングの領域では、初期イザーリストでのブレースの使用に関して一般的な疑問が生じます。具体的には、プログラマーは、特定の集計タイプには外側のブレースが必要であるように見えるが、他のタイプにはそうではないシナリオに遭遇する場合があります。この記事の目的は、トピックをより深く掘り下げ、外側のブレースを省略できる時期を明確にすることを目的としています。 { int foo; ダブルバー; }; std :: array a1 = //エラーC2078:初期化剤が多すぎます { {0、0.1}、 {2、3.4} }; // わかりました std :: array a2 = {0.1、2.3}; エラーは、A1の初期剤が多すぎることを示しており、追加のブレースが必要であることを示唆しています。ただし、A2の外側のブレースを省略しても、エラーは発生しません。この矛盾は、A1にはアウターブレースがA2に必要な理由の問題を提起します。 STD :: Arrayは、集合体および普通の古いデータ型(POD)として分類されますが、他の標準ライブラリコンテナはそうではありません。ユーザー定義のコンストラクターを備えたコンテナとは異なり、STD :: Arrayにはそれがありません。最初のデータメンバーは、テンプレート引数として指定されたサイズnの配列です。このデータメンバーは、初期化のリストを使用して直接初期化されます。この概念をさらに説明するために、

を次のように定義するカスタム集計タイプAARRAYを検討するために、追加のブレースが必要です。 struct aarray { データ[2]; //内部配列 };

struct A
{
    int foo;
    double bar;
};

std::array a1 = 
  // error C2078: too many initializers
  {
    {0, 0.1},
    {2, 3.4}
  };

// OK
std::array a2 = {0.1, 2.3};

aarray a1 = { {//内部配列の初期化を開始します {//内部配列の最初の要素を初期化します 0、0.1 }、//最初の要素の初期化を終了します {2、3.4} //内部配列の2番目の要素を初期化します } //内部配列の初期化を終了します }; //エラー:ブレースを使用していない場合は、初期剤が多すぎます AARRAY B1 = { 0、0.1、 2、3.4 };

std :: array a2 = {0.1、2.3};

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3