这是一个在 C++ 中不起作用的相关 C 答案(作为结构的零初始值设定项): Initializing a struct to 0 。提出的解决方案之一是:
myStruct _m1 = {0};
这在 C 中工作正常,但在 C++ 中不起作用。 :( :
错误:无法使用“int”类型的右值初始化“myScope::MyStruct”类型的成员子对象。
如何在 C++ 中对结构进行零初始化?
有关的:
- 在 C 中将结构初始化为 0: 将结构初始化为 0
- 更新:(一个相邻但不重复的问题,结果也非常有用) 使用空花括号进行初始化
也可以看看:
- [相邻相关,但适用于 C 样式数组, 而不是 结构] 如何将数组的所有成员初始化为相同的值?
对于投票结束这个问题的人:
我的问题不是这个其他问题的重复( 使用空花括号初始化),因为这个其他问题不是询问在 C++ 中初始化结构的各种方法以及为什么 C 方式不起作用,而是它们是问 为什么 C++ 关键字 explicit
破坏他们的初始化技术之一。两个截然不同的问题。不重复。
我问的后续问题:
原文由 Gabriel Staples 发布,翻译遵循 CC BY-SA 4.0 许可协议
在我们开始之前:
= {0}
语法将 C 样式 数组 的所有成员初始化为零! 见这里: https ://en.cppreference.com/w/c/language/array_initialization。这有效:works!
myStruct _m1 = {};
typedef struct { int num1 = 100; int num2 = -100; int num3; int num4 = 150; } data_t;
struct data_t { int num1 = 100; int num2 = -100; int num3; int num4 = 150; };
data_t d2 = {}; printf(“d2.num1 = %i\nd2.num2 = %i\nd2.num3 = %i\nd2.num4 = %i\n\n”, d2.num1, d2.num2, d2.num3, d2.num4);
d2.num1 = 100 d2.num2 = -100 d2.num3 = 0 d2.num4 = 150
myStruct _m1{};
data_t d2{}; printf(“d2.num1 = %i\nd2.num2 = %i\nd2.num3 = %i\nd2.num4 = %i\n\n”, d2.num1, d2.num2, d2.num3, d2.num4);
// Does NOT do what I expected! Only sets the FIRST value in the struct to zero! // The rest seem to use default values. 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
uint8_t buffer[100] = {0}; // sets all elements to 0 in C OR C++ uint8_t buffer[100] = {}; // sets all elements to 0 in C++ only (won’t compile in C)
”`
这里最大的收获是:
data_t d{}
,data_t d = {}
和data_t d = {0}
,实际上将结构的所有成员设置为零!data_t d{}
将所有值设置为结构中定义的默认值。data_t d = {}
还将所有值设置为默认值。data_t d = {0}
仅将 FIRST 值设置为零,而将所有其他值设置为其默认值。所以, 要明确!
请注意,我写的上述关键要点似乎与 cppreference.com 上的此文档 相矛盾,因此我提出了下面列出 的后续问题,这对我的理解非常有帮助!
走得更远
= {0}
将其所有成员设置为 0?参考:
cpp/run_struct_initialization.sh
有关的:
leds[0] = {10, 20, 30, 40, 50};
] Arduino Stack Exchange:初始化结构数组