【发布时间】:2021-09-19 01:25:47
【问题描述】:
说我有:
class Foo
{
public:
int x;
Foo() : x() {}
}
在构造函数运行后读取x会是UB吗?更具体地说,这是什么类型的初始化,零初始化、直接初始化还是默认初始化?
我知道如果我们可以:
Foo() : x(42) {}
x 将直接初始化为42,但我不太确定上面的 sn-p,如果事实证明这是默认初始化的,我不想被 UB 狼咬.
【问题讨论】:
-
难道不是zero-initialization"作为非类类型和没有构造函数的值初始化类类型成员的值初始化序列的一部分,包括值初始化没有为其提供初始化器的聚合元素。" 和 "如果 T 是标量类型,则对象的初始值是显式转换为 T 的整数常量零。"?
-
@NathanOliver 感谢复制,不知道为什么我没有找到。
-
@HattedRooster 没问题。 FWIW,我搜索了 空括号在成员初始化程序 c++ 中的含义 以找到它。目标是第一个结果。
标签: c++ initialization language-lawyer c++20 member-initialization