2013-03-01 126 views
2

我看到了这样写的C++代码,它可以通过与MSVC编译。这个表达意味着什么? SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)};

SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)}; 

这个表达式是什么意思?我从来没有见过这样的代码。

有人可以帮忙吗?

+0

这意味着该结构中的第一个字段是size-this-struct成员,它被设置为(还有什么)结构的大小。在那之后,其余的成员都是零填充的。 – WhozCraig 2013-03-01 10:24:09

回答

5

这被称为aggregate initialization。在这种情况下,它仅显式初始化devdata的第一个成员(其余的值已初始化,感谢WhozCraig进行评论并使我添加此项),大概是一个保存字节数的字段,其大小等于结构体。


SP_DEVINFO_DATA参考页中的第一构件是一个名为DWORDcbSize它是:

大小,以字节为单位的SP_DEVINFO_DATA结构。

+1

它也会初始化其余成员,而不仅仅是第一个成员。 Per C++ 11§8.5.1,p7,*“如果列表中的初始化子句数少于聚合中的成员,则未初始化的每个成员都应该从空的初始化程序列表初始化。”*空初始化器列表对未指定的其余成员执行值初始化,然后通过C++ 11第8.5节,第7节和第C++ 11第8.5节介绍了通过值初始化导致定标器成员的零初始化(这就是所有这个结构体) P5。所以它确实击中了他们。 – WhozCraig 2013-03-01 10:46:28

+0

@WhozCraig,是的。我的意思是明确初始化,但已经更新了答案。谢谢。 – hmjd 2013-03-01 10:49:33

+0

Np。我一直在Windows编程中使用它,需要这些结构安排。击败旧版本的decl + memset + set-first-member-to-size bs。很好的更新。 +1。 – WhozCraig 2013-03-01 10:51:36

1

这是如何初始化一个结构。您初始化SP_DEVINFO_DATA-结构的第一个成员,该结构应该是cbSize与结构的大小。这对于这种特殊情况是必要的。

2

这意味着:

初始化名为devdata一个自动变量, SP_DEVINFO_DATA型的,它的第一构件设置为sizeof(SP_DEVINFO_DATA)

WINAPI结构在其第一个成员中暴露结构的大小是常见做法。这样,在这样的结构上运行的代码就可以检查这个成员来确定它正在使用的结构的版本。

相关问题