在进行了大量测试并编写了关于如何在 C++ 中将结构初始化为零的答案之后(注意:对它的否决是在我完全重写它之前),我不明白为什么= {0}
不设置所有成员结构为零!
如果你这样做:
struct data_t
{
int num1 = 100;
int num2 = -100;
int num3;
int num4 = 150;
};
data_t d3 = {0};
printf("d3.num1 = %i\nd3.num2 = %i\nd3.num3 = %i\nd3.num4 = %i\n\n",
d3.num1, d3.num2, d3.num3, d3.num4);
...输出是:
d3.num1 = 0
d3.num2 = -100
d3.num3 = 0
d3.num4 = 150
...虽然我希望输出是这样的:
d3.num1 = 0
d3.num2 = 0
d3.num3 = 0
d3.num4 = 0
...这意味着只有 FIRST 成员设置为零,其余的都设置为默认值。
我一直认为以这三种方式中的任何一种初始化结构都会对其进行零初始化,但显然我错了!
data_t d{}
data_t d = {}
data_t d = {0}
因此,我从这个答案中得到的关键结论是:
这里最大的收获是这些 NONE:
data_t d{}
,data_t d = {}
和data_t d = {0}
, 实际上将结构的所有成员设置为零!
data_t d{}
将所有值设置为结构中定义的默认值。data_t d = {}
还将所有值设置为其默认值。- 并且
data_t d = {0}
仅将 FIRST 值设置为零,并将所有其他值设置为其默认值。
那么,为什么不初始化 C++ 结构以= {0}
将其所有成员设置为 0?
请注意,我上面的关键要点实际上与我多年来一直使用的这个看起来相当官方的文档相矛盾(https://en.cppreference.com/w/cpp/language/zero_initialization),它说T t = {} ;
并且T {} ;
都是零初始化器,事实上,根据我上面的测试和外卖,它们不是。
参考:
- 如何在 C++ 中将结构初始化为 0
- 更新:我刚刚也指向了这个引用:初始化对象时 {0} 是什么意思?