假设存在std::multiset<some_data_type> s
,如何将此std::multiset
的地址保存为整数,然后使用此整数指定其位置的其他指针?我的意思是可以做这样的事情:
std::multiset<int> mySet;
//insert some data in mySet
int a = address_of(mySet);
std::multiset<int>* otherSet = location(a);
答案 0 :(得分:4)
这是C ++ 11的intptr_t
类型为您提供的<cstdint>
,如果您的系统支持它(标准没有强制要求)。
如果它可用,它保证足够大以容纳任何指针值(与int
不同),并且被定义为转换为intptr_t
和相同的指针类型< / em>很安全。每次转换都需要reinterpret_cast
。
如果可以避免,通常不想这样做。尽可能使用原始指针类型。类型很好!
答案 1 :(得分:2)
您可以使用reinterpret_cast
将指针存储到std::intptr_t
or std::uintptr_t
中,然后将其检索回来。这仅定义为从 - 并返回到完全相同的指针类型,[u]intptr_t
的值是实现定义的。