Полагаю, вообще ничего. Foo()
разрешено, даже если это не имеет смысла ... Я попытался изменить struct
на class
и попробовал diff на сгенерированном exe, и они оказались такими же, то есть класс без Метод подобен структуре с практической и «эффективной» точки зрения.
Но : если вы используете только один альтернативы, сохраняя struct
или class
независимо от того, случается, что new Foo
и new Foo()
дают исполняемые файлы, которые отличается! (По крайней мере, используя g ++) Т.е.
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo; delete f1; }
компилируется в нечто отличное от
struct Foo { int i; double d; }
int main() { Foo *f1 = new Foo(); delete f1; }
и то же самое происходит с class
вместо struct
. Чтобы узнать, в чем разница, мы должны взглянуть на сгенерированный код ... и узнать, является ли это особенностью g ++ или нет, я должен попробовать другой компилятор, но у меня есть только gcc и сейчас нет времени для анализа вывода asm g ++. ..
В любом случае с «функциональной» (практической) точки зрения это одно и то же.
Добавить
В конце всегда лучше узнать или провести более глубокое расследование некоторых типичных человеческих проблем на сайтах Q / A ... единственное отличие в коде, сгенерированном g ++ в () и без () случаях,
movl $0, (%eax)
fldz
fstpl 4(%eax)
, который является фрагментом, который инициализирует в 0 / 0.0 целое и двойное число структуры ... так что Сеймур знает это лучше (но я мог бы обнаружить это, не зная, взглянул ли я сначала на асм!)