2010-06-17 64 views
7

所以,如果你從虛空轉換*以鍵入*或類型*到void *您應該使用:演員*爲TYPE *使用C++風格的轉換:的static_cast或reinterpret_cast的

void func(void *p) 
{ 
    Params *params = static_cast<Params*>(p); 
} 

void func(void *p) 
{ 
    Params *params = reinterpret_cast<Params*>(p); 
} 

對我來說,static_cast似乎更正確,但我見過這兩個用於相同的目的。另外,轉換的方向是否重要。即如果我仍然使用的static_cast爲:

_beginthread(func,0,static_cast<void*>(params) 

我已經閱讀C++風格鑄造的其他問題,但我仍然不知道正確的方法是什麼這種情況下(我認爲是的static_cast)

回答

7

您應該使用static_cast,以便正確操作指針以指向正確的位置。但是,只有在使用靜態轉換才能將指針強制轉換爲void *時才應該這樣做。否則,你應該reinterpret_cast到完全相同類型的原始指針(沒有基地或這樣的)。

0

你應該總是避免reinterpret_cast,在這種情況下,static_cast將完成這項工作。轉換爲void*指針時,不需要任何類型的演員。

+0

那麼,爲何的reinterpret_cast <>?是否有使用reinterpre_cast <>的情況。其他3個鑄造操作員是否可以覆蓋所有的鑄造操作? – 2010-06-17 19:17:17

+0

如果void *的另一邊將投射到基類,則在分配給void之前,您還需要投射到該基類。 – 2010-06-17 19:19:28

+0

@Noah這方面的一些參考? – 2010-06-17 19:27:00

相關問題