2017-02-25 4 views
1

Ich habe die folgenden DatenstrukturenArray Initialisierung mit Strukturen

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; 
}; 

Ich möchte, dass sie in der folgenden Art und Weise initialisieren:

mapping_t m1 { 
    3,         // n1 
    254,        // n2 
    true,        // enable 
    5,         // n3 

    // map 
    // i1     i2    i3 
    {{ 
     {0x1000,   1,    8} 
    }} 
}; 

kann ich sicher sein, dass die Elemente in der std::array<single_t, 32> map;, in dieser Fall indiziert 1..31, werden auf 0 initialisiert oder ist es wie die nicht initialisierte Variable auf dem Stapel int i;? Mein Debugger zeigt an, dass sie bei 0 sind, aber hängt diese Implementierung vom Debug-Build ab oder ist dies im Standard definiert?

+0

Die Elemente 1 - 31 von 'm1' werden initialisiert, d. H. In Ihrem Fall auf Null initialisiert. Dein Code ist in Ordnung. –

Antwort

2

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

Wenn die Anzahl der Initialisierer Klauseln ist kleiner als die Anzahl der Mitglieder oder Initialisiererliste vollständig leer ist, sind die übrigen Mitglieder Wert initialisiert. Wenn ein Mitglied eines Referenztyps eines dieser verbleibenden Mitglieder ist, ist das Programm schlecht ausgebildet.

Der Standardfall für Wert Initialisierung mit 0

sehen http://en.cppreference.com/w/cpp/language/value_initialization

Die Auswirkungen des Wert Initialisierung initialisieren:

[...]

4) Andernfalls wird das Objekt initialisiert.

Um zusammenzufassen, geht es Ihnen gut!