数组初始化与结构
问题描述:
我有以下数据结构数组初始化与结构
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,但是实现依赖于调试版本还是在标准中定义的?
答
从http://en.cppreference.com/w/cpp/language/aggregate_initialization
如果初始化子句的数目是小于成员或 初始化列表的数目完全是空的,其余成员是 值初始化。如果参考类型的成员是其余成员之一,则该程序不合格。
默认情况下为正值初始化是与0
初始化参见http://en.cppreference.com/w/cpp/language/value_initialization
值初始化的效果是:
[...]
4 )否则,该对象被零初始化。
为了舒适,你很好!
'm1'中的元素1 - 31被初始化,即初始化为零。你的代码很好。 –