我需要將包含地址的整型轉換爲實際指針類型。我可以使用的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