ere*_*eOn 21 c++ initialization pod
今天早上我问自己一些事情,我找不到正确"谷歌"的话:
让我们说:
struct Foo
{
int bar;
};
struct Foo2
{
int bar;
Foo2() {}
};
struct Foo3
{
int bar;
Foo3() : bar(0) {}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我默认实例化Foo,Foo2并且Foo3:
Foo foo;
Foo2 foo2;
Foo3 foo3;
Run Code Online (Sandbox Code Playgroud)
在哪种情况下,bar会员是否正确初始化?
(Foo3显然很明显地初始化它,并且只在这里显示明确差异Foo2所以问题主要是关于前两个.)
谢谢 !:)
APr*_*mer 26
只有foo3才会出现在所有情况下.foo2和foo将是静态持续时间.请注意,Foo类型的对象可能在其他上下文中初始化为零:
Foo* foo = new Foo(); // will initialize bar to 0
Foo* foox = new Foo; // will not initialize bar to 0
Run Code Online (Sandbox Code Playgroud)
而Foo2不会:
Foo2* foo = new Foo2(); // will not initialize bar to 0
Foo2* foox = new Foo2; // will not initialize bar to 0
Run Code Online (Sandbox Code Playgroud)
该区域很棘手,C++ 98和C++ 03之间的措辞和IIRC再次使用C++ 0X,所以我不依赖它.
同
struct Foo4
{
int bar;
Foo4() : bar() {}
};
Run Code Online (Sandbox Code Playgroud)
bar也将始终初始化.
既然bar是内置类型的默认初始化将被未定义Foo1和Foo2.如果它是一个自定义类型,那么默认构造函数将被调用,但在这里并非如此.
课程:始终初始化变量.
| 归档时间: |
|
| 查看次数: |
7493 次 |
| 最近记录: |