在下面的代码中,我试图初始化数组(原始 C-classic 和std::array
),以最小化元素类型的使用,即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
I 只能指定S
一次。但是尝试相同的std::array
方法不起作用(请参阅评论std_array_no_type
)。我必须S
只为初始化列表中的第一个元素指定每个 or(这也是问题的一个有趣部分)的类型(请参阅 参考资料std_array_one_type_only
)。
那么,有没有办法只使用一次类型来定义一个初始化std::array
对象S
?如果不是,根据标准的哪个条款?为什么S
允许std_array_one_type_only
编译单个显式类型?