2014-10-26 10 views
25

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?

+4

puoi leggerlo tu stesso con una semplice ricerca su Google. –

+10

@Begueradj: Forse, ma il punto è un po 'sottile, e potrei non essere incline a fidarmi della prima cosa che Google lancia contro di me. –

+1

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) –

risposta

30

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.

+1

Non è possibile implementare un'implementazione con padding in una struttura, ma non in un'unione? – mafso

+0

@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." –

+0

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. –