【发布时间】:2013-02-10 04:39:07
【问题描述】:
这是 MFC 的 CMap 类中默认的 HashKey 函数。
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY key)
{
// default identity hash - works for most primitive values
return ((UINT)(void*)(DWORD)key) >> 4;
}
我的问题是为什么需要类型转换 (DWORD) 和 (void*)?。我猜(DWORD)可能与16位机器的兼容性事务有一些关系。但我对 void* 感到困惑。
【问题讨论】:
-
不,没有理由。编写此代码的人根本不知道他们在做什么。
-
不知道,但
(void*)和(UINT)和(DWORD)之一没用。 -
@R.. 这段代码 sn-p 来自“Programming Windows with MFC”
-
可能有人在做某事。
-
@R.. 考虑到您不知道该函数的历史或原始程序员的意图,建议编写它的人不知道他们在做什么有点天真。 Hans Passant 解释说,在最初编写代码时有这种疯狂。