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