使用结构体初始化数组

schorsch_76

我有以下数据结构

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) 否则,对象被零初始化。

总而言之,你很好!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档