将所有值分配给结构有什么意义
Is there any point in assigning all values to a struct?
我最近在试验SendInput
,发现一切都按预期工作,而无需为结构分配其他值
#include <Windows.h>
int main(int argc, char *argv[]) {
INPUT input;
input.type = 1;
input.ki.wVk = 0x41;
SendInput(1, &input, sizeof(INPUT));
return EXIT_SUCCESS;
}
如果您看一下我正在使用的 INPUT
结构的 MSDN 定义,它还有许多其他变量(除了 type
和 wVk
是我设置的唯一变量)。
为该结构中的所有其他字段添加类似于input.ki.dwExtraInfo = 0;
的内容有什么意义吗?我假设,默认情况下,当您分配结构时,它会将零写入内存,因此设置这些变量没有意义?
局部变量(以及局部结构变量的扩展成员)未初始化,因此尝试读取或写入它们会导致未定义的行为。
它恰好在这种情况下有效,但你不能依赖它。
话虽如此,此结构的字段可能全部为 0,因为它是 main
函数的本地字段,进程的内存可能在启动之前已清除,并且变量不会超出程序生命周期的范围,因此它在堆栈上使用的空间不会被其他任何东西使用。
但同样,这是一个不能依赖的实现细节。 所以最好显式初始化所有值。
您不必分配变量,但我认为最好实例化为 0
或 null
,并在get
这些变量时沿途设置检查点。在我看来,它使您的代码更加健壮,因为您永远不会忘记已实例化的内容和未实例化的内容。
此外,否,默认情况下,如果未实例化值,则不会将其写入内存中。
相关文章:
- 有什么方法可以遍历结构吗
- 在 c++ 中拥有一组结构的正确方法是什么?
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++中deque数据结构的大O是什么?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 不同的类或结构初始化方法之间的性能差异是什么?
- 结构块指的是什么?
- 让编译器告诉什么确切的纯虚拟方法使结构抽象?
- C++ 类层次结构中的"对齐"是什么意思?
- 自定义数据结构的优点是什么?
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 我的堆栈和库存清单程序的结构有什么问题?
- 将此私有删除器函数包装在结构中的目的是什么?
- 在只读(即 const)访问器上执行结构化绑定的最佳实践是什么?
- 清除结构向量时会发生什么?
- 这里的以下 OOP 结构是什么?
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 初始值使用什么?结构、枚举或类,#defines c++