C ++ - 样式转换为整数的指针

时间:2013-09-10 00:36:09

标签: c++ pointers casting type-conversion

GetQueuedCompletionStatus()的文档中,MSDN说

  

这是通过为hEvent成员指定有效的事件句柄来完成的   OVERLAPPED结构,并设置其低位。

如果事件的类型为HANDLE,type *为void *,我如何使用C ++样式转换?我不能直接对指针应用| = 1,reinterpret_cast仅在具有相同间接级别的类型之间进行转换,而static_cast也不起作用。 C ++的做法是什么,避免使用C风格的转换并使用C ++风格转换为size_t?我知道另一种方法是使用联合,但这似乎比使用C风格的强制转换更加糟糕。

1 个答案:

答案 0 :(得分:4)

reinterpret_cast就是你所需要的:

OVERLAPPED MyOverlapped;
// ...

MyOverlapped.hEvent = GetEvent();  // replace with whatever O/S call that is provided the event handle
ASSERT((reinterpret_cast<uintptr_t>(MyOverlapped.hEvent) & 0x1) == 0x0);  // if lsbit is a flag, then OS source of hEvent better NOT have it INITIALLY set!
reinterpret_cast<uintptr_t &>(MyOverlapped.hEvent) |= 0x1;
// ...
GetQueuedCompletionStatus(..., &MyOverlapped, ...);