初始化结构中的第一个元素

Rob*_*Rob 6 c++

我在C++中做了很多Win32编程,许多Win32结构都有一个'size'(通常称为cbSizeor length)成员作为第一个需要在进行相关API调用之前设置的元素.例如:

WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);
Run Code Online (Sandbox Code Playgroud)

现在,我认为将结构成员初始化为零是一个好习惯,我可以这样做:

WINDOWPLACEMENT wp = { };
Run Code Online (Sandbox Code Playgroud)

要么

WINDOWPLACEMENT wp = { 0 };
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样初始化第一个成员,那么结构的其他成员会发生什么:

WINDOWPLACEMENT wp = { sizeof(WINDOWPLACEMENT) };
Run Code Online (Sandbox Code Playgroud)

它们是否自动初始化为零?或者它取决于我正在使用哪个编译器以及它是否是调试版本?

Eri*_*rik 11

是的,它们会自动初始化为零.

8.5.1/7:

如果列表中的初始值设定项少于聚合中的成员,则未明确初始化的每个成员都应进行值初始化(8.5).[例:

struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };
Run Code Online (Sandbox Code Playgroud)

使用"asdf"初始化ss.a,使用"asdf"初始化ss.b,使用int()形式的表达式的值初始化ss.c,即0.