C++ 如何将自定义类指针转换为无符号int

C++ 如何将自定义类指针转换为无符号int,c++,casting,C++,Casting,我需要将自定义类指针转换为无符号的int值。这就是我所累的 Class A{ }; int main() { A* a = foo(); unsigned int handler = reinterpret_cast<unsigned int>(a); return 0; } A类{ }; int main() { A*A=foo(); unsigned int handler=reinterpret_cast(a); 返回0; } 它给出了警告 警告C4302:“重新解释强制

我需要将自定义类指针转换为无符号的int值。这就是我所累的

Class A{
};

int main()
{
A* a = foo();
unsigned int handler = reinterpret_cast<unsigned int>(a);
return 0;
}
A类{
};
int main()
{
A*A=foo();
unsigned int handler=reinterpret_cast(a);
返回0;
}
它给出了警告
警告C4302:“重新解释强制转换”:从“A*”截断为“unsigned int”


<> P> >在C++方式中如何正确地克服这个问题

错误可能意味着你正在编译成一个64位目标,在这种情况下,一个指针为64位,重新解释为int,意味着截断(因为int最多为32位)。 不确定如何处理该处理程序,但更安全的方法是在c++11可用的情况下强制转换到uintptr\t

如果包含
,它应该是这样的:

uintptr_t handler = reinterpret_cast<uintptr_t>(a);
uintpttr\u t handler=reinterpret\u cast(a);

看起来很像您在64位平台上。unsigned int不够大,无法容纳64位指针。为什么首先要将指针转换为整数?这很少是一件有用的事情。你是对的,我正在构建64位。如何通过
uintptr\t
实现它?我有C++11environment@NayanaAdassuriyauintptr\u t在中定义,一旦有了include,就可以像uintptr\u t handler=reinterpret\u cast(a)@techolic:实际上,
::uintpttr\u t
是在
stdint.h
中定义的。使用
#include
只能保证您拥有
std::uintpttr\u t
您是对的。请在回答中添加您的评论。因此,这将是明确的。tnx!