L'inizializzazione di aggregazione inizializza i membri dati di un oggetto classe aggrete, mentre l'inizializzazione del valore di un aggregato lo inizializzerà per la prima volta che azzera anche i byte di riempimento, come mostrato dal seguente spec preventivoValore aggregato rispetto all'inizializzazione di un oggetto di classe aggregato con padding
se T è un gruppo (possibilmente cv-qualificato) mancata unione tipo di classe, ciascun membro dati non statico ed ogni sotto-oggetto classe base è zero-inizializzato e imbottitura è inizializzato a zero bit;
Questo significa che generalmente si dovrebbe evitare l'inizializzazione struct aggregati utilizzando ()
e preferiscono {}
invece perché quest'ultimo non deve garantire che bit di riempimento sono pari a zero?
Se la risposta a quanto sopra è "no", ci sono casi in cui le implementazioni non riempiono il riempimento con {}
ma fanno con ()
? E tra questi casi, qual è la scelta migliore da utilizzare per il programmatore?
[Clang] (http://coliru.stacked-crooked.com/a/e30e266d90c16662) rispetta la regola, mentre [gcc] (http://coliru.stacked-crooked.com/a/eff8609fc153d914) e MSVC azzera ancora i byte di riempimento nel mio test. – Jamboree