2010-06-17 5 views
7

Also, wenn Ihr von Void Umwandlung * * auf Typ oder vom Typ * auf void * Sie verwenden sollten:Cast von Void * TYP * mit C++ Casts: static_cast oder reinterpret_cast

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

oder

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

Für mich scheint static_cast der korrekter zu sein, aber ich habe beide für den gleichen Zweck verwendet gesehen. Auch spielt die Richtung der Umwandlung eine Rolle. dh soll ich noch static_cast für verwenden:

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

Ich habe die anderen Fragen auf C++ Stil Casting gelesen, aber ich bin noch nicht sicher, was die richtige Art und Weise für dieses Szenario ist (ich glaube, es ist static_cast)

Antwort

7

Sie sollten static_cast verwenden, damit der Zeiger richtig bearbeitet wird, um auf den richtigen Ort zu zeigen. Dies sollten Sie jedoch nur dann tun, wenn Sie den Zeiger auf "void *" gesetzt haben. Andernfalls sollten Sie den genauen Typ des ursprünglichen Zeigers neu interpretieren (keine Basen oder ähnliches).

0

Sie sollten immer vermeiden reinterpret_cast, und in diesem Fall static_cast wird die Aufgabe erledigen. Es ist nicht erforderlich, bei der Konvertierung in einen void* Zeiger einen Cast zu erstellen.

+0

Warum haben reinterpret_cast <>? Gibt es Situationen, in denen reinterpre_cast <> verwendet werden soll? Können alle Casting-Operationen von den anderen 3 Cast-Operatoren abgedeckt werden? –

+0

Wenn die andere Seite von void * in eine Basisklasse umgewandelt wird, müssen Sie auch in diese Basisklasse umwandeln, bevor Sie void zuweisen. –

+0

@Noah Eine Referenz dafür? –