阵列初始化结构



i具有以下数据结构

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)否则,该对象为零。

求发,你很好!

最新更新