C++ 类指针用 reinterpret_cast 转换为 --int64 的问题
代码声明如下:
#ifdef _WIN64
typedef unsigned __int64 MEAS_ID;
#else
typedef unsigned long MEAS_ID;
#endif
//类
class className
{};
//单向链表
struct ListLink{
MEAS_ID AddressVale;
className* pClass;
ListLink* pNext;
};
function: MEAS_ID createclass(){
MEAS_ID retval;
className* pClass = new className();
retval = reinterpret_cast<MEAS_ID>(pClass);
//将对象增加到链表内
ListLink* pLink = new ListLink;
pLink->AddressVale = retval;
pLink->pClass = pClass;
pLink->pNext = NULL;
pLinkList->CreateLink(pLink);
return retval;
}
function: // 删除链表内对象
int DeleteLink(MEAS_ID &iNo){
ListLink* pPre = m_pMeasHead;
ListLink* pCur = pPre->pNext;
int retval = -1;
while(pCur){
if(pCur->AddressVale==iNo){
pPre->pNext = pCur->pNext;
if(pPre->pNext == NULL) m_pMeasTail = pPre;
delete pCur->pMeas;
pCur->pMeas = NULL;
delete pCur;
retval = 0;
iNo = 0;
break;
}
pPre = pCur;
pCur = pPre->pNext;
}
return retval;
}
问题出现在从链表中删除对象,如果 MEAS_ID
为 unsigned --int64
的话 while 循环内 pCur->AddressVale==iNo
判断结果为 FALSE,而如果 MEAS_ID
为 unsigned long
的话,其判断结果为 TRUE,请问是什么问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
unsigned __int64
是个很傻的类型,用uint64_t
,在你的例子中,应该用uintptr_t
,虽然你可能以为它们是一样的,但是真的不一样。