2

次のコードstd::arrayでは、要素タイプの使用を最小限に抑えて配列 (生の C クラシックおよび ) を初期化しようとしていますS

#include <array>

struct S { unsigned u; int i; };

auto std_array = std::array<S, 3>{
    S{0U, 0},
    S{1U, 1},
    S{2U, 2}
};

S raw_array[] = {
    {0U, 0},
    {1U, 1},
    {2U, 2}
}; 

/*  // compile error: excess elements in struct initializer
std::array<S,3> std_array_no_type = {
    {0U, 0},
    {1U, 1},
    {2U, 2}
}; 
*/

std::array<S,3> std_array_one_type_only = {
    S{0U, 0},
    {1U, 1},
    {2U, 2}
}; 

int main() {}

を使用するraw_arrayと、一度だけ指定できますS。しかし、同じことを試してもstd::arrayうまくいきません (コメントを参照してくださいstd_array_no_type)。S各または (これも質問の興味深い部分です) 初期化子リストの最初の要素に対してのみ型を指定する必要があります(「参考文献」を参照std_array_one_type_only)。

std::arrayでは、型を一度だけ使用して初期化されたオブジェクトを定義する方法はありますSか? いいえの場合、標準のどの条項に従っていますか? そして、なぜ単一の明示的な型をコンパイルSできるのですか?std_array_one_type_only

4

1 に答える 1