2017-02-25 139 views
1

我有以下數據結構數組初始化與結構

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

'm1'中的元素1 - 31被初始化,即初始化爲零。你的代碼很好。 –

回答

2

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

如果初始化子句的數目是小於成員或 初始化列表的數目完全是空的,其餘成員是 值初始化。如果參考類型的成員是其餘成員之一,則該程序不合格。

默認情況下爲正值初始化是與0

初始化參見http://en.cppreference.com/w/cpp/language/value_initialization

值初始化的效果是:

[...]

4 )否則,該對象被零初始化。

爲了舒適,你很好!