草庐IT

WINDOWPLACEMENT

全部标签

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

我用C++进行了很多Win32编程,许多Win32结构都有一个“大小”(通常称为cbSize或length)成员作为需要在可以进行相关的API调用之前设置。例如:WINDOWPLACEMENTwp;wp.length=sizeof(WINDOWPLACEMENT);GetWindowPlacement(hWnd,&wp);现在,我认为将结构成员初始化为零是一种很好的做法,我可以这样做:WINDOWPLACEMENTwp={};或WINDOWPLACEMENTwp={0};但是,如果我像这样初始化第一个成员,结构的其他成员会发生什么:WINDOWPLACEMENTwp={sizeof(W

c++ - 在 memset 等上使用结构初始化 ({...}) 是否更可取/可以?

代码:WINDOWPLACEMENTwplcmt={sizeof(WINDOWPLACEMENT)};看起来比下面干净多了:WINDOWPLACEMENTwplcmt;memset(&wplcmt,0,sizeof(WINDOWPLACEMENT));wplcmt.length=sizeof(WINDOWPLACEMENT);这个东西的汇编输出也很不错,对于更长的结构,MSVC甚至使用memset而不是xoreax,eax和mov的。从标准的角度来看,它看起来也不错。但我仍然害怕结构未紧密包装的边界情况,比如#pragmapack(128),Windows突然决定对该结构进行memcm