使用结构

时间:2017-02-25 07:58:13

标签: c++ constructor c++14 initializer-list

我有以下数据结构

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,但是该实现是否依赖于调试版本或者是否在标准中定义了?

1 个答案:

答案 0 :(得分:2)

来自http://en.cppreference.com/w/cpp/language/aggregate_initialization

  

如果初始化程序子句的数量小于成员数或   初始化列表完全为空,其余成员为   值初始化。如果引用类型的成员是其余成员之一,则该程序格式错误。

值初始化的默认情况是使用0

进行初始化

请参阅http://en.cppreference.com/w/cpp/language/value_initialization

  

值初始化的影响是:

     

[...]

     

4)否则,该对象被零初始化。

为了sumarize,你很好!