我看到了這樣寫的C++代碼,它可以通過與MSVC編譯。這個表達意味着什麼? SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)};
SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)};
這個表達式是什麼意思?我從來沒有見過這樣的代碼。
有人可以幫忙嗎?
我看到了這樣寫的C++代碼,它可以通過與MSVC編譯。這個表達意味着什麼? SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)};
SP_DEVINFO_DATA devdata = {sizeof(SP_DEVINFO_DATA)};
這個表達式是什麼意思?我從來沒有見過這樣的代碼。
有人可以幫忙嗎?
這被稱爲aggregate initialization。在這種情況下,它僅顯式初始化devdata
的第一個成員(其餘的值已初始化,感謝WhozCraig進行評論並使我添加此項),大概是一個保存字節數的字段,其大小等於結構體。
從SP_DEVINFO_DATA
參考頁中的第一構件是一個名爲DWORD
cbSize
它是:
大小,以字節爲單位的SP_DEVINFO_DATA結構。
它也會初始化其餘成員,而不僅僅是第一個成員。 Per C++ 11§8.5.1,p7,*「如果列表中的初始化子句數少於聚合中的成員,則未初始化的每個成員都應該從空的初始化程序列表初始化。」*空初始化器列表對未指定的其餘成員執行值初始化,然後通過C++ 11第8.5節,第7節和第C++ 11第8.5節介紹了通過值初始化導致定標器成員的零初始化(這就是所有這個結構體) P5。所以它確實擊中了他們。 – WhozCraig 2013-03-01 10:46:28
@WhozCraig,是的。我的意思是明確初始化,但已經更新了答案。謝謝。 – hmjd 2013-03-01 10:49:33
Np。我一直在Windows編程中使用它,需要這些結構安排。擊敗舊版本的decl + memset + set-first-member-to-size bs。很好的更新。 +1。 – WhozCraig 2013-03-01 10:51:36
這是如何初始化一個結構。您初始化SP_DEVINFO_DATA
-結構的第一個成員,該結構應該是cbSize
與結構的大小。這對於這種特殊情況是必要的。
這意味着:
初始化名爲
devdata
一個自動變量,SP_DEVINFO_DATA
型的,它的第一構件設置爲sizeof(SP_DEVINFO_DATA)
。
WINAPI結構在其第一個成員中暴露結構的大小是常見做法。這樣,在這樣的結構上運行的代碼就可以檢查這個成員來確定它正在使用的結構的版本。
這意味着該結構中的第一個字段是size-this-struct成員,它被設置爲(還有什麼)結構的大小。在那之後,其餘的成員都是零填充的。 – WhozCraig 2013-03-01 10:24:09