说我有:
class Foo
{
public:
int x;
Foo() : x() {}
}
x
构造函数运行后会读取 UB吗?更具体地说,这是什么类型的初始化,零、直接或默认初始化?
我知道如果我们有:
Foo() : x(42) {}
x
将直接初始化为,42
但我不太确定上面的代码片段,如果事实证明这是默认初始化的,我不想被 UB wolf 咬。
说我有:
class Foo
{
public:
int x;
Foo() : x() {}
}
x
构造函数运行后会读取 UB吗?更具体地说,这是什么类型的初始化,零、直接或默认初始化?
我知道如果我们有:
Foo() : x(42) {}
x
将直接初始化为,42
但我不太确定上面的代码片段,如果事实证明这是默认初始化的,我不想被 UB wolf 咬。
这是什么类型的初始化
x()
执行值初始化:
当使用带有空括号对的成员初始化程序初始化非静态数据成员或基类时
or braces (since C++11)
;
作为非类类型int
,最后x
初始化为零0
。
- 否则,对象被零初始化。