¿Cuál es el tamaño de la clase vacía y la diferencia entre unión, estructura y clase en c ++?

¿Cuál es el tamaño de la clase vacía y la diferencia entre unión, estructura y clase en c ++?

Mi idea:

si no hay miembros estáticos en ellos, deberían ser iguales porque todos los miembros están asignados en la stack.

Si todos están vacíos, son iguales.

Si tienen miembros estáticos, depende de la ubicación relativa de los miembros dentro de ellos.

derecho ?

Gracias

El estándar de C ++ especifica que el tamaño de una clase vacía no debe ser cero .
Por lo general, es de 1 byte en la mayoría de los sistemas.

En palabras de Bjarne Stroustrup, el tamaño es distinto de cero ” Para garantizar que las direcciones de dos objetos diferentes sean diferentes”.

El tamaño es 1 en la mayoría de los sistemas porque las reglas de alineación no importan, ya que la entrada del nombre de la clase se realiza en la tabla de símbolos solo para obtener una dirección única.

Para los fanáticos de Standerdese:
C ++ 03 Estándar Sección 9: Clases, Párrafo 2:

Los objetos completos y los subobjetos de miembros de tipo de clase tendrán un tamaño distinto de cero. 94)

class == struct la única diferencia es que en una estructura, todos los miembros, es decir, ivars y métodos son públicos por defecto.

los miembros estáticos, es decir, las variables o los métodos, no forman parte de la clase / estructura en el sentido de que no pertenecen a una instancia en particular. así que un sizeof no los incluirá.

union no es una clase ni una estructura, Union se usa para asignar una estructura a un diseño de memoria particular.

para obtener el tamaño simplemente haga un sizeof() de una variable de instancia y verá.