经过大量测试和编写之后这个答案是关于如何在 C++ 中将结构初始化为零 https://stackoverflow.com/questions/61240589/how-to-initialize-a-struct-to-0-in-c/61240590#61240590(注:反对票是before我完全重写了它),我不明白为什么= {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
...虽然我expected输出如下:
d3.num1 = 0
d3.num2 = 0
d3.num3 = 0
d3.num4 = 0
...这意味着只有第一个成员设置为零,其余所有成员都设置为默认值。
我一直认为用这 3 种方式中的任何一种初始化结构都会对其进行零初始化,但显然我错了!
data_t d{}
data_t d = {}
data_t d = {0}
我的主要收获这个答案 https://stackoverflow.com/questions/61240589/how-to-initialize-a-struct-to-0-in-c/61240590#61240590因此是这样的:
这里最大的收获是,这些都不是:data_t d{}
, data_t d = {}
, and data_t d = {0}
,实际上将结构体的所有成员设置为零!
-
data_t d{}
将所有值设置为结构中定义的默认值。
-
data_t d = {}
还将所有值设置为其默认值。
- And
data_t d = {0}
仅将 FIRST 值设置为零,并将所有其他值设置为其默认值。
那么,为什么不将 C++ 结构体初始化为= {0}
将其所有成员设置为 0?
请注意,我上面的要点实际上与我多年来使用的看起来相当正式的文档相矛盾(https://en.cppreference.com/w/cpp/language/zero_initialization https://en.cppreference.com/w/cpp/language/zero_initialization),这表示T t = {} ;
and T {} ;
都是零初始化器,而事实上,根据我的测试和上面的结论,它们不是。
参考:
- C++中如何将结构体初始化为0 https://stackoverflow.com/questions/61240589/how-to-initialize-a-struct-to-0-in-c/61240590#61240590
- 更新:我也被指出了这个参考文献:初始化对象时,{0} 是什么意思? https://stackoverflow.com/questions/88957/what-does-0-mean-when-initializing-an-object