c++ - rango - randomize en c
El tamaño de la estructura vacía es 0 en C y 1 en C++ ¿por qué? (3)
Aquí hay un maravilloso artículo que describe por qué ocurre esto, y más pertinentemente, una forma (segura) de hacerlo :)
Posibles duplicados:
Clase vacía en C ++
¿Cuál es el tamaño de una estructura vacía en C?
Leí en alguna parte que el tamaño de una estructura vacía en C ++ es 1. Así que pensé en verificarlo. Desafortunadamente lo guardé como un archivo C y usé el encabezado <stdio.h>
y me sorprendió ver el resultado. Fue 0.
Eso significa
struct Empty {
};
int main(void)
{
printf("%d",(int)sizeof(Empty));
}
estaba imprimiendo 0 cuando se compiló como un archivo C y 1 cuando se compiló como un archivo C ++. Quiero saber el motivo. Leí que el tamaño de la estructura vacía en c ++ no es cero porque si el tamaño fuera 0 dos objetos de la clase tendrían la misma dirección que no es posible. ¿Dónde estoy equivocado?
Hay varias buenas razones. Entre otros, esto es para asegurar que la aritmética del puntero sobre los punteros a esa estructura no conduzca a un ciclo infinito. Más información:
http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a
No puede tener una estructura vacía en C. Es una violación de restricción sintáctica. Sin embargo, gcc permite una estructura vacía en C como una extensión . Además, el comportamiento no está definido si la estructura no tiene ningún miembro nombrado porque
C99
dice:
Si struct-declaration-list no contiene miembros con nombre, el comportamiento no está definido.
Asi que
struct Empty {}; //constraint violation
struct Empty {int :0 ;}; //no named member, the behaviour is undefined.
Y sí el tamaño de una estructura vacía es C ++ no puede ser cero :)