我需要将包含地址的整型转换为实际指针类型。我可以使用的reinterpret_cast如下:C++:将整型转换为指针的安全方法
MyClass *mc1 = reinterpret_cast<MyClass*>(the_integer);
然而,这并不执行任何运行时检查,看是否有问题的地址实际上持有MyClass的对象。我想知道在首先转换为void *(使用reinterpret_cast)并在结果中使用dynamic_cast方面是否有任何好处。像这样:
void *p = reinterpret_cast<void*>(the_integer);
MyClass *mc1 = dynamic_cast<MyClass*>(p);
assert(mc1 != NULL);
使用第二种方法有什么好处吗?
第二种方法不是合法的C++,dynamic_cast表达式的类型可能不是void *。 – 2009-12-02 10:46:20
假设整数值最初是一个对象的指针,那么int可能不能保存指针。这就是为什么我们有无效*。如果您正在通过无类型边界投射指针以进行传输,则应将它们转换为void *并返回到原始类型。 – 2009-12-02 10:50:54
他没有特别说'int',类型可能是intptr_t。 – 2009-12-02 10:53:41