Coo*_*kie 5 c++ void-pointers 32bit-64bit
这与在此找到的问题标题完全相同- 我还想将一个内存地址存储在变量中 - 或者更确切地说,void*在变量中存储一个.但是,我宁愿将它存储在某种形式的int而不是a中string,因为我希望之后再将其转换回指针.
这是因为它是一个类的成员,我想用boost serialize序列化,如果我确实使用了一个void*,boost serialize可能会尝试存储指针所指向的内容,这在我看来不是很明智案件.
我需要32位和64位gcc和MSVC,所以基本上我想知道是否有一个内置的整数类型,它是同一平台上指针的大小.或者,我想我需要IFDEF自己的类型?
intptr_t并且uintptr_t是足以容纳a的整数类型void*.它们由C++ 11 in <cstdint>和C99 in.定义<stdint.h>
如果uintptr_t不可用,您可以尝试uintmax_t,在相同的标题或Boost中定义<boost/cstdint.hpp>.
在C++中将对象的地址转换为整数类型(不使用C风格的强制类型转换)的一种方法是使用reinterpret_cast.保证能够保存其他答案中提到的指针地址的整数类型是uintptr_t.
uintptr_t myint = reinterpret_cast<uintptr_t>(&myobject)
要么
uintptr_t myint = reinterpret_cast<uintptr_t>(mypointer)