我有以下数据结构
struct single_t
{
uint16_t i1 = 0;
uint8_t i2 = 0;
uint8_t i3 = 0;
};
struct mapping_t
{
uint8_t n1;
uint8_t n2;
bool enable;
uint n3;
std::array<single_t, 32> map;
};
我想以下列方式初始化它们:
mapping_t m1 {
3, // n1
254, // n2
true, // enable
5, // n3
// map
// i1 i2 i3
{{
{0x1000, 1, 8}
}}
};
我可以肯定,std::array<single_t, 32> map;
中的元素(在本例中为索引1..31)被初始化为0或者它是否与堆栈int i;
上的未初始化变量一样?我的调试器显示它们是0,但是该实现是否依赖于调试版本或者是否在标准中定义了?
答案 0 :(得分:2)
来自http://en.cppreference.com/w/cpp/language/aggregate_initialization
如果初始化程序子句的数量小于成员数或 初始化列表完全为空,其余成员为 值初始化。如果引用类型的成员是其余成员之一,则该程序格式错误。
值初始化的默认情况是使用0
进行初始化请参阅http://en.cppreference.com/w/cpp/language/value_initialization
值初始化的影响是:
[...]
4)否则,该对象被零初始化。
为了sumarize,你很好!