繁体   English   中英

C ++中的默认结构初始化

[英]Default Struct Initialization in C++

假设我有一个看起来像这样的结构(一个POD):

struct Foo
{
  int i;
  double d;
};

以下两行之间有什么区别:

Foo* f1 = new Foo;
Foo* f2 = new Foo();

第一个是未初始化的值; 第二个将它们初始化为零。 这只是POD类型的情况,它没有构造函数。

我什么都没想。 允许Foo() ,即使它没有任何意义......我已经尝试将struct更改为class并在生成的exe上尝试了diff,它们也是相同的,这意味着没有方法的类就像一个结构从实际和“有效”的角度来看。

但是 :如果你只使用其中一个替代方法,保留structclass ,那么new Foonew Foo()会给出不同的可执行文件! (至少使用g ++)即

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 ++ idiosincracy,我应该尝试另一个编译器,但我只有gcc,现在没时间分析g ++的asm输出。 ..

无论从“功能”(实际)的角度来看,它都是一回事。

最后,对Q / A站点上的一些常见人类问题进行了解或进行更深入的调查总是更好... ... g ++在()和no()情况下生成的代码的唯一区别,

movl    $0, (%eax)
    fldz
    fstpl   4(%eax)

这是一个片段,初始化为0 / 0.0的int和结构的两倍...所以Seymour更了解它(但我可以在不知道我是否先看过asm的情况下发现它!)

根据我发布的链接。

在C ++中,类和结构之间的唯一区别是类成员默认是私有的,而struct-members默认为public。 所以结构可以有构造函数,语法和类相同。

结构构造器信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM