supongo nada en absoluto. Foo()
está permitido, incluso si no tiene sentido ... He intentado cambiar struct
en class
y probé una diferencia en el exe generado, y resultaron ser los mismos, lo que significa que una clase sin método es como una estructura de un punto de vista práctico y "efectivo".
Pero: si sólo utiliza uno de la alternativa, manteniendo struct
o class
no importa, sucede que new Foo
new Foo()
y da ejecutables que se diferencian! (Al menos usando g ++) es decir
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo; delete f1; }
se compila en somehing diferente de
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo(); delete f1; }
y lo mismo sucede con class
en lugar de struct
. Para saber dónde está la diferencia deberíamos mirar el código generado ... y para saber si es una idiosincrasia de g ++ o no, debería probar con otro compilador pero ahora solo tengo gcc y no hay tiempo para analizar la salida de asm de g ++. ..
De todos modos desde un punto de vista "funcional" (práctico), es lo mismo.
Añadir
Al final siempre es mejor saber o hacer una investigación más profunda para algunos problemas humanos comunes en los sitios Q/A ... la única diferencia en el código generado por g ++ en() y no() en los casos,
movl $0, (%eax)
fldz
fstpl 4(%eax)
que es un fragmento que inicializa a 0/0,0 int y el doble de la estructura ... así Seymour sabe mejor (pero podría haber descubierto que sin saber si tenía echó un vistazo a la ASM primero!)
Tenga en cuenta la pregunta relacionada [¿Por qué es un error utilizar un conjunto vacío de corchetes para llamar a un constructor sin argumentos?] (Http://stackoverflow.com/questions/180172/why-is-it-an- error-to-use-an-empty-set-of-brackets-to-call-a-constructor-with-no). – Troubadour