6

这与此处找到的问题标题完全相同-我还想将内存地址存储在变量中-或者更确切地说,将 a 存储在void*变量中。但是,我宁愿将它存储为某种形式的 anint而不是 a string,因为我想在之后将它转换回指针。

这是因为它是一个类的成员,然后我想用 boost serialize 进行序列化,如果我确实使用了 a void*, boost serialize 可能会尝试存储指针指向的内容,这在我的案子。

对于 32 位和 64 位 gcc 和 MSVC,我需要这个,所以基本上我想知道是否有一个内置的整数类型,它是同一平台上指针的大小。或者,我想我需要IFDEF自己的类型?

4

3 回答 3

9

intptr_t并且uintptr_t是足够大的整数类型以容纳void*. 它们由 C++11<cstdint>和 C99定义<stdint.h>

如果uintptr_t不可用,您可以尝试uintmax_t在相同的标头中定义或由 Boost 中的<boost/cstdint.hpp>.

于 2012-11-05T15:33:06.313 回答
6

在 C++ 中将对象的地址转换为整数类型(不使用 C 样式强制转换)的一种方法是使用 reinterpret_cast。如其他答案中所述,保证能够保存指针地址的整数类型是 uintptr_t。

uintptr_t myint = reinterpret_cast<uintptr_t>(&myobject)

或者

uintptr_t myint = reinterpret_cast<uintptr_t>(mypointer)

于 2014-02-06T16:44:54.170 回答
0

您不能序列化指针。

仅仅是因为当您反序列化它时,指针将无效。

使用 JSON、XML、XDR 等内容。您的选择。

序列化就是让它扁平化。指针是一个分支。

顺便说一句 - 你忽略了一个事实,即 C++ 在类型安全方面应该更好一些。

于 2012-11-05T15:39:30.263 回答