c++ - 有什么理由更喜欢 memset/ZeroMemory 而不是 WinAPI 结构的值初始化?

标签 c++ c winapi struct initialization

在 Win32 编程中使用了一些 POD 结构。这些结构通常需要在使用前清零。

这可以通过调用 memset()/ZeroMemory()

来完成
STRUCT theStruct;
ZeroMemory( &theStruct, sizeof( theStruct ) );

或按值初始化:

STRUCT theStruct = {};

虽然the two variants above are not equivalent in general :

  • 以不同的方式处理填充
  • 区别对待非 POD 成员变量

如果是在 Win32 中使用的 POD 结构,它们看起来是等效的。

在任何情况下应该使用 memset()/ZeroMemory() 而不是 Win32 POD 结构的值初始化?

最佳答案

我总是用:

STRUCT theStruct = {}; // for C++, in C use {0}

它更短、更标准,因此更优雅,我并不真正关心理论差异。我们在这里讨论的是具体操作系统的代码。

另一个优点是你也可以立即在第一个成员中设置结构大小,如下所示:

STRUCT theStruct = {sizeof(STRUCT)}; 

许多 Win32 结构要求您在第一个成员中设置大小。

关于c++ - 有什么理由更喜欢 memset/ZeroMemory 而不是 WinAPI 结构的值初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853339/

相关文章:

c# - Java 铁杆专家的 Windows 开发

c++ - 强制显示系统托盘通知气球

c++ - C++ 中的动态转换有多昂贵?

c++ - 如何推迟shared_ptr的删除操作?

c++ - ucnv_open 错误 U_FILE_ACCESS_ERROR

C 共享内存在结构体中传递结构体

c++ - 子对话框 - SetWindowTextA 或 SendMessageA 使程序崩溃 - MFC

c++ - 未定义的 vtable 引用

c - Eclipse 交叉编译...我该怎么做?

c - 获取系统调用ID并将其存储在.txt文件中(LINUX)