2012-06-04 12 views
7

¿El estándar de C++ dicta el diseño de compilación de la clase y la estructura? ¿Cómo se compilan de manera diferente, especialmente si están vacíos?¿Cómo se compila una clase vacía y una estructura vacía?

+0

Absolutelu "no" en ambos casos a la primera pregunta. Una clase tiene un puntero "this" implícito en respuesta a la segunda pregunta. – paulsm4

+11

@ paulsm4: su respuesta a la segunda pregunta es incorrecta. no hay ninguna diferencia entre una "clase" y una "estructura" en este sentido. A saber, una 'struct' puede tener miembros' virtuales'. –

+5

Las clases y las estructuras son exactamente lo mismo, la única diferencia es con la especificación de acceso predeterminada (para miembros y bases). – GManNickG

Respuesta

13

Lo hace de una manera, dice que tiene que asignar espacio para ello a menos que sea cierto cuando se usa como una clase base (conocida como Optimización de clase base vacía). Esto es para garantizar que diferentes objetos tengan diferentes direcciones.

Se compilan de la misma manera dado que struct y class son lo mismo, excepto el especificador de acceso predeterminado. En C++ 11 se introduce la noción de diseño estándar clases/estructuras, y garantiza que el diseño de la memoria para clases vacías sea el mismo.

+1

¿Se especifica en dónde y cuánto espacio se asigna? 1 byte? – Paranaix

+2

@Paranaix: Por lo que sé, no se especifica. Podría ser más de 1 byte para satisfacer los requisitos de alineación. –

+0

El tamaño de referencia dependería de la arquitectura. Una dirección en x86 sería 32 bits. – starbolin