Sì, se sono tipi POD. I tipi di POD sono garantiti per essere compatibili con il layout (ovvero puoi memcpy da uno all'altro) se hanno membri compatibili con il layout nello stesso ordine. Dal momento che una sottoclasse ha automaticamente tutti i membri della sua classe base nello stesso ordine e, in questo caso, nessun altro, saranno compatibili con il layout e quindi della stessa dimensione. Vedere la sezione 9.3 delle specifiche.
Si noti che, per essere tipi POD devono avere funzioni virtuali (tra gli altri requisiti)
EDIT
L'ultimo progetto di norma ha diviso i requisiti per i tipi di POD in due gruppi: banali classi e classi standard. POD classi sono quelli che sono entrambi banali e layout standard, e credo che per il guarentee sizeof che si desidera, solo di essere layout standard sono sufficienti - hanno bisogno di non essere anche banale (e quindi POD) classi. I requisiti per layout standard dalla specifica sono:
A standard la layout classe è una classe che:
- ha alcun membri dati non statici della classe tipo non standard layout (o array di tali tipi) o riferimento,
- non ha funzioni virtuali (10.3) e nessuna classe di base virtuale (10.1),
- ha lo stesso controllo di accesso (Articolo 11) per tutti i membri di dati non statici,
- ha classi di base non standard di layout,
- o non ha mancato membri di dati statici nella classe di maggior derivazione e al massimo una classe di base con membri di dati non statici o senza classi di base con membri di dati non statici e
- non ha classi di base dello stesso tipo di primo membro di dati non statici.108
fonte
2010-05-07 01:28:46
Si noti inoltre che il 'Bar' tha t è contenuto in 'Foo' può avere una dimensione diversa da' Bar' non contenuta in un 'Foo'. Ad esempio, un'ottimizzazione comune consiste nel fare in modo che le classi di base abbiano la dimensione zero se sono vuote, ma diverse da zero se non sono contenute come classi base (come richiesto da C++). –