variable una the tamaño saber qué length how hace como arreglo array c++ c struct sizeof

c++ - una - ¿Diferencia entre sizeof(estructura vacía) y sizeof(struct con matriz vacía)?



sizeof c++ (2)

En C, el comportamiento de un programa no está definido si una estructura se define sin ningún miembro con nombre.

C11-§6.7.2.1:

Si struct-declaration-list no contiene ningún miembro con nombre, ya sea directamente o a través de una estructura anónima o unión anónima, el comportamiento no está definido.

GCC permite una estructura vacía como extensión y su tamaño será 0 .

Para C ++, el estándar no permite un objeto de tamaño 0 y, por sizof(EmptyStruct) tanto, sizof(EmptyStruct) devuelve un valor de 1.
Las matrices de longitud cero no son compatibles con C ++ ¹ estándar, pero GNU las admite como una extensión y el operador sizeof devolverá 0 si se aplica.

1. § 8.5.1-nota al pie 107) C ++ no tiene matrices de longitud cero.

Tengo dos estructuras definidas de la siguiente manera:

struct EmptyStruct{ }; struct StructEmptyArr{ int arr[0]; }; int main(void){ printf("sizeof(EmptyStruct) = %ld/n", sizeof(EmptyStruct)); printf("sizeof(StructEmptyArr) = %ld/n", sizeof(StructEmptyArr)); return 0; }

Compilado con gcc (g ++) 4.8.4 en Ubuntu 14.04, x64.

Salida (para ambos gcc y g ++):

sizeof(EmptyStruct) = 1 sizeof(StructEmptyArr) = 0

Puedo entender por qué sizeof(EmptyStruct) es igual a 1 pero no puede entender por qué sizeof(StructEmptyArr) es igual a 0 . ¿Por qué hay diferencias entre dos?