コンテナを初期化するために初期化子リストを使用する場合、 std::vector と std::array の構文の違いに気づいたかもしれません。 std::vector は単一の中括弧 {} を使用して初期化しますが、std::array には二重の中括弧 {{}} が必要です。この違いが存在する理由を理解するために、これらのコンテナーの基本的なプロパティを詳しく調べます。
std::vector とは異なり、ユーザー定義のコンストラクターがある場合、std::array は集約型とみなされます。これは、初期化子リストを受け入れるコンストラクターを含む、ユーザーが宣言したコンストラクターが欠けていることを意味します。したがって、 std::array の初期化は、C から継承された C の機能である集合体の初期化に依存します。
C では、集計の初期化は 2 つの方法で実行できます。
古いスタイルでは、宣言内で初期化するときに余分な中括弧が省略される可能性がありました。ただし、このオプションはリストの直接初期化には使用できません。
CWG 欠陥 #1270 は、この制限に対処することを目的としており、他のオプションで中括弧の省略が可能です。リストの初期化の形式。承認されると、次の構文が有効になります。
std::array
この変更により、std::vector と std::array の間の現在の構文の不一致が解消され、集計初期化の実践に一貫性が提供されます。
以上が`std::vector` と `std::array` が初期化子リストに異なる構文を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。