ホームページ  >  記事  >  バックエンド開発  >  `std::vector` と `std::array` が初期化子リストに異なる構文を使用するのはなぜですか?

`std::vector` と `std::array` が初期化子リストに異なる構文を使用するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-08 12:18:02728ブラウズ

Why do `std::vector` and `std::array` use different syntax for initializer lists?

std::vector と std::array の異なる Initializer_list の動作を理解する

コンテナを初期化するために初期化子リストを使用する場合、 std::vector と std::array の構文の違いに気づいたかもしれません。 std::vector は単一の中括弧 {} を使用して初期化しますが、std::array には二重の中括弧 {{}} が必要です。この違いが存在する理由を理解するために、これらのコンテナーの基本的なプロパティを詳しく調べます。

std::array: 集合体

std::vector とは異なり、ユーザー定義のコンストラクターがある場合、std::array は集約型とみなされます。これは、初期化子リストを受け入れるコンストラクターを含む、ユーザーが宣言したコンストラクターが欠けていることを意味します。したがって、 std::array の初期化は、C から継承された C の機能である集合体の初期化に依存します。

C での集合体初期化

C では、集計の初期化は 2 つの方法で実行できます。

  1. 古いスタイル: =: 構文を使用する (例: std::array)。 y = {{1, 2, 3, 4}};
  2. 直接リスト初期化: 初期化子リストを直接渡します (例: std::array)。 y{1, 2, 3, 4};

古いスタイルでは、宣言内で初期化するときに余分な中括弧が省略される可能性がありました。ただし、このオプションはリストの直接初期化には使用できません。

今後の変更

CWG 欠陥 #1270 は、この制限に対処することを目的としており、他のオプションで中括弧の省略が可能です。リストの初期化の形式。承認されると、次の構文が有効になります。

std::array y{1, 2, 3, 4};

この変更により、std::vector と std::array の間の現在の構文の不一致が解消され、集計初期化の実践に一貫性が提供されます。

以上が`std::vector` と `std::array` が初期化子リストに異なる構文を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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