Ich nehme gar nichts. Foo()
ist erlaubt, auch wenn es keinen Sinn ergibt ... Ich habe versucht, struct
in class
zu ändern und versuchte ein Diff auf der generierten Exe, und sie resultierten, um gleich zu sein, was bedeutet, dass eine Klasse ohne Methode wie eine Struktur aus ist eine praktische und "effektive" Sichtweise.
Aber: wenn Sie ein der alternativen verwenden, struct
oder class
egal zu halten, kommt es vor, dass new Foo
und new Foo()
ausführbaren Dateien gibt, die sich unterscheiden! (Zumindest unter Verwendung von g ++) I.e.
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo; delete f1; }
in somehing unterscheidet sich von
zusammengestellt
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo(); delete f1; }
und das gleiche passiert mit class
statt struct
. Um zu wissen, wo der Unterschied ist, sollten wir uns den generierten Code ansehen ... und um zu wissen, ob es ein g ++ idiosincracy ist oder nicht, sollte ich einen anderen Compiler ausprobieren, aber ich habe nur gcc und keine Zeit, um die Ausgabe von g ++ zu analysieren. ..
Jedenfalls von einem "funktionalen" (praktischen) Standpunkt aus, ist es das Gleiche.
hinzufügen
Am Ende ist es immer besser ist durch g für einige gemeinsame menschliche Probleme auf Q/A-Stellen ... der einzige Unterschied in dem Code erzeugt tiefere Untersuchung zu kennen oder tun ++ in() und nein() Fälle
movl $0, (%eax)
fldz
fstpl 4(%eax)
, die ein Fragment ist, das auf 0/0.0 den int und das Doppel der Struktur initialisiert ... so Seymour weiß es besser (aber ich es ohne zu wissen, hat entdeckt, könnte, wenn ich hatte Werfen Sie einen Blick auf die ASM zuerst!)
Beachten Sie die verwandte Frage [Warum ist es ein Fehler, einen leeren Satz von Klammern zu verwenden, um einen Konstruktor ohne Argumente aufzurufen?] (Http://stackoverflow.com/questions/180172/why-is-it-an- error-to-use-an-leer-set-of-brackets-to-call-a-constructor-with-no). – Troubadour