所以假设我正在使用这个玩具示例:
struct Foo {
int member;
};
我知道默认构造函数不会默认初始化member
。因此,如果我这样做,member
仍然未初始化:const Foo implicit_construction
. 顺便说一句,这似乎工作正常:const Foo value_initialization = Foo()
尽管我的理解是这实际上并没有使用默认构造函数。
如果我Foo
这样改变:
struct Foo {
Foo() = default;
int member;
};
我尝试这样做const Foo defaulted_construction
,不出所料,它的行为implicit_construction
与member
未初始化完全一样。
最后,如果我改成Foo
这样:
struct Foo {
Foo(){};
int member;
};
我这样做:const Foo defined_construction
member
是零初始化的。我只是想弄清楚隐式定义的构造函数是什么样的。我本来会的Foo(){}
。不是这样吗?是否还有其他一些黑魔法在起作用,使我定义的构造函数的行为与默认构造函数不同?
编辑:
也许我在这里被误导了。defaulted_construction
肯定是未初始化的。
虽然defined_construction
肯定是初始化的。
我认为这是标准化的行为,这是不正确的吗?