1. ホーム
  2. c++

C++11:正しいstd::arrayの初期化?

2023-09-30 15:34:46

質問

std::arrayを以下のように初期化すると、コンパイラは中括弧が足りないという警告を出します。

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

これで問題が解決しました。

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

これは警告メッセージです。

missing braces around initializer for 'std::array<int, 4u>::value_type [4] {aka int [4]}' [-Wmissing-braces]

これは私のバージョンのgccのバグなのでしょうか、それとも意図的にそうしているのでしょうか?もしそうなら、なぜですか?

どのように解決するのですか?

の素の実装です。 std::array :

template<typename T, std::size_t N>
struct array {
    T __array_impl[N];
};

これは、唯一のデータメンバが従来の配列である集約構造体であり、そのような内部の {} は内側の配列を初期化するために使用されます。

中括弧の消去は集約的な初期化において特定のケースで許されます(しかし通常は推奨されません)ので、この場合は中括弧をひとつだけ使用することができます。こちらを参照してください。 C++ 配列のベクトル