我今天早上在问自己一些事情,但找不到合适的词“google”:

可以说我有:

struct Foo
{
  int bar;
};

struct Foo2
{
   int bar;
   Foo2() {}
};

struct Foo3
{
   int bar;
   Foo3() : bar(0) {}
};

现在,如果我默认实例化FooFoo2Foo3:
Foo foo;
Foo2 foo2;
Foo3 foo3;

在哪种情况下,bar成员是否正确初始化了

(好吧Foo3显然是对它进行了显式初始化,此处只显示了它与Foo2的区别,因此问题主要是关于前两个。)

谢谢 ! :)

最佳答案

在所有情况下都只有foo3。如果foo2和foo具有静态持续时间,则它们将为。请注意,在其他上下文中,Foo类型的对象可能被初始化为零:

Foo* foo = new Foo(); // will initialize bar to 0
Foo* foox = new Foo; // will not initialize bar to 0

而Foo2不会:
Foo2* foo = new Foo2(); // will not initialize bar to 0
Foo2* foox = new Foo2; // will not initialize bar to 0

这个区域很棘手,在C++ 98和C++ 03之间,以及在IIRC和C++ 0X之间更改的措辞,所以我不必依赖它。


struct Foo4
{
   int bar;
   Foo4() : bar() {}
};

bar也将始终被初始化。

关于c++ - C++中的默认初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6251707/

10-11 22:40
查看更多