ホームページ  >  記事  >  バックエンド開発  >  C の 2D `std::array` に単純な中括弧の初期化を使用できないのはなぜですか?

C の 2D `std::array` に単純な中括弧の初期化を使用できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-21 11:51:11416ブラウズ

Why Can't I Use Simple Brace Initialization for 2D `std::array`s in C  ?

2D std::array では中括弧の初期化ができないのはなぜですか?

C では、次のように std::array を使用して単純な 2D 配列を定義できます。例:

std::array<std::array<int, 3>, 2> a = {
    {1, 2, 3},
    {4, 5, 6}
};

ただし、この初期化は次のエラーで失敗します。初期化子が多すぎることを示すコンパイラ エラー。この不一致の理由は、std::array が次のとおりであるという事実にあります。は、C スタイルの配列をカプセル化する集約クラスです。

適切に初期化するには、C クラスとそれに含まれる C 配列に個別の中かっこが必要です。

std::array<std::array<int, 3>, 2> a = { {{{1, 2, 3}}, {{4, 5, 6}}} };

この修正されたコードでは、次のようになります。

  • 最も外側の中括弧は std::array を初期化します。 class.
  • ネストされた中括弧は、クラス内の C スタイルの配列を初期化します。

C と C 構文の間で中括弧の構造を一致させることにより、中括弧の初期化を使用して多次元配列を正常に初期化できます。 C で。

以上がC の 2D `std::array` に単純な中括弧の初期化を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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