说我有一个结构,看起来像这样(一POD):默认结构初始化在C++
struct Foo
{
int i;
double d;
};
什么是以下两行之间的差异:
Foo* f1 = new Foo;
Foo* f2 = new Foo();
说我有一个结构,看起来像这样(一POD):默认结构初始化在C++
struct Foo
{
int i;
double d;
};
什么是以下两行之间的差异:
Foo* f1 = new Foo;
Foo* f2 = new Foo();
每链路I发布。
在C++中,类和结构之间的唯一区别是,类成员默认是私有的,而struct-members默认为public。所以结构可以有构造函数,语法和类相同。
重点是构造新对象时使用或省略曲线括号。这个问题适用于类和结构。 – Troubadour 2010-06-01 16:50:31
我想,什么都没有。 Foo()
是允许的,即使它没有任何意义......我试图将struct
更改为class
,并尝试对生成的exe文件进行diff,结果相同,这意味着没有方法的类就像是一个struct一个实用而“有效”的观点。
但:如果你只使用替代一个,保持struct
或class
不管了,它发生new Foo
和new Foo()
给出了不同的可执行文件! (至少使用g ++)I.e.
struct Foo { int i; double d; } int main() { Foo *f1 = new Foo; delete f1; }
被编译成somehing不同
struct Foo { int i; double d; } int main() { Foo *f1 = new Foo(); delete f1; }
与class
代替struct
同样的情况。要知道区别在哪里,我们应该看看生成的代码......并且要知道它是否是g ++的特性,我应该尝试使用另一个编译器,但我现在只有gcc,现在没时间分析g ++的asm输出。从“功能”(实用)的角度来说,无论如何,它是一回事。
添加
在结束它始终是更好地了解或做对Q/A网站的一些常见的人类问题顺藤摸瓜......在由g ++中生成的代码的唯一区别()和否()情况下,
movl $0, (%eax) fldz fstpl 4(%eax)
这是初始化为0/0.0的INT和结构的双重片段...所以西摩知道它更好的(但我可能不知道,如果我发现了它首先看看asm!)
为什么使用括号没有意义,它调用默认的构造函数。如果有的话,缺乏parens是没有意义的。 – Salgar 2010-06-01 16:52:48
你在说什么?这是一个测试,对于问题和foo()通常意味着对函数/方法的调用这一事实似乎是合理的;一个不太有用的测试,而不是阅读规格,这可能是一个可能的评论家。你的评论对我来说毫无意义。 – ShinTakezou 2010-06-01 18:10:31
请注意相关问题[为什么使用一组空括号来调用没有参数的构造函数时出错?](http://stackoverflow.com/questions/180172/why-is-it-an-错误使用的 - 一个空集,括号到的呼叫-A-构造与 - 无)。 – Troubadour 2010-06-01 16:51:49