次のコード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