我今天早上在问自己一些事情,但找不到合适的词“google”:
可以说我有:
struct Foo
{
int bar;
};
struct Foo2
{
int bar;
Foo2() {}
};
struct Foo3
{
int bar;
Foo3() : bar(0) {}
};
现在,如果我默认实例化
Foo
,Foo2
和Foo3
: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/