【发布时间】:2010-12-12 23:12:40
【问题描述】:
代码:
WINDOWPLACEMENT wplcmt = {sizeof(WINDOWPLACEMENT)};
看起来比:
WINDOWPLACEMENT wplcmt;
memset(&wplcmt, 0, sizeof(WINDOWPLACEMENT));
wplcmt.length = sizeof(WINDOWPLACEMENT);
这个东西的汇编输出也很不错,对于更长的结构,MSVC 甚至使用memset 而不是xor eax, eax 和mov 的。从标准的角度来看,它看起来也不错。但是我仍然担心结构不紧密的边界情况,比如#pragma pack(128),windows 突然决定对结构进行 memcmp。
那么使用这样的语法是好还是坏? 使用此类初始化是一种好习惯吗?
【问题讨论】:
-
这听起来像是一个拖钓问题。
-
IMO 都可以,但为什么 Windows(或其他任何东西)会 memcmp 结构?首先,对具有未使用位的结构执行 memcmp 肯定是不明智的。不要求那些未使用的填充字节为零(或任何其他值),因此任何考虑它们的比较都是无效的。有没有什么真正做到这一点,或者您是否担心“以防万一”?
-
一旦超出您的代码范围,您就无法确定接下来会发生什么。所以我只是想知道如何编写更干净、更健壮的代码。
标签: c++ c windows initialization