Vorrei sapere la differenza tra struttura e unione per un tipo di dati membro se ce n'è uno.C'è qualche differenza tra struttura e unione se abbiamo un solo membro?
risposta
In C: Nessuna. Il famoso "scherzo salvaspazio" #define struct union
non è quasi uno scherzo.
In C++ 98: i sindacati possono avere solo POD members, le classi non di unione possono avere membri arbitrari.
In C++ 11: i sindacati possono avere membri di dati arbitrari di tipo di oggetto (ma non di tipo di riferimento), ma il loro utilizzo è più limitato rispetto a quello delle classi non di unione. (Ovvero: un'unione non può avere funzioni membro virtuali, non può essere una classe base e non può avere classi base.) Inoltre, devi scrivere più codice per far funzionare un'unione con un membro anziché una classe non sindacale con un membro , dal momento che devi scrivere tu stesso i costruttori e il distruttore.
Non è possibile implementare un'implementazione con padding in una struttura, ma non in un'unione? – mafso
@mafso: io non la penso così. L'unico vincolo che vedo è questo: "La dimensione di un sindacato è sufficiente per contenere il più grande dei suoi membri di dati non statici." –
Nessuna spaziatura consentita * prima * il primo membro di una struct e potrebbe esserci padding alla fine per unione e struttura. Quindi nessuna differenza per quanto riguarda l'unione di un singolo membro con la struttura. –
puoi leggerlo tu stesso con una semplice ricerca su Google. –
@Begueradj: Forse, ma il punto è un po 'sottile, e potrei non essere incline a fidarmi della prima cosa che Google lancia contro di me. –
Per quanto riguarda il POD e gli aggregati con ulteriori discussioni sulle modifiche per C++ 11, vedere [Cosa sono gli aggregati e i POD e in che modo sono speciali] (http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods -e-come-perché-sono-loro-speciali) –