ホームページ >バックエンド開発 >C++ >`std::vector` と `std::array` に異なる初期化構文が必要なのはなぜですか?

`std::vector` と `std::array` に異なる初期化構文が必要なのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 21:09:021095ブラウズ

Why Do `std::vector` and `std::array` Require Different Initialization Syntaxes?

std::Vector と std::Array Initializer リストの動作が異なるのはなぜですか?

両方の std::vector のオブジェクトを初期化する場合と C の std::array データ構造では、構文に顕著な違いが生じます。 std::vectors は次のように中かっこで初期化できます:

std::vector<int> x{1,2,3,4};

ただし、std::array の場合は二重中かっこが必要です:

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

理由なぜなら、この矛盾はこれらのデータ構造の根底にある性質から生じているからです。 std::array は 集合体 です。ユーザー定義のコンストラクターを持たないオブジェクト、または明示的に std::initializer_list を取得するオブジェクトでもあります。

std::array の中括弧を使用した初期化は、 に該当します。集合体初期化、C から継承。集合体の初期化では、=: を使用した「古いスタイル」が採用されています。

std::array<int, 4> y = { { 1, 2, 3, 4 } };

この構文では、「フォームの宣言」内の余分な中括弧を省略できます。 T x = { a };」。ただし、このルールは、2 番目のコード スニペットで使用されているものを含め、他の形式のリスト初期化には適用されません。

CWG の欠陥レポート (#1270) では、この制限が強調されています。提案された解決策が受け入れられた場合、中括弧の省略は他のリスト初期化形式を含むように拡張され、次の構文が有効になる可能性があります:

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

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

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