2010-02-04 9 views
5

In C++ für jeden Datentyp ich folgendes tun kann:Welche Art von Cast ist von Typ * zu void *?

Type* typedPointer = obtain(); 
void* voidPointer = typedPointer; 

die gegossen wird ausgeführt, wenn I Type* zu void* zuweisen? Ist das dasselbe wie

Type* typedPointer = obtain(); 
void* voidPointer = reinterpret_cast<void*>(typedPointer); 

oder ist es eine andere Besetzung?

Antwort

4

Es ist eine Standardzeigerumwandlung. Da es sich um eine Standardkonvertierung handelt, ist keine explizite Umwandlung erforderlich. Wenn Sie das Verhalten dieser Konvertierung mit einem expliziten Cast reproduzieren möchten, wäre es static_cast, nicht reinterpret_cast.

Be Definition von static_cast gegeben in 5.2.9/2, static_cast kann alle Konvertierungen durchführen, die implizit durchgeführt werden können.

2

Es ist die gleiche Besetzung. Jeder Zeiger kann in einen void-Zeiger umgewandelt werden.

4

Von Type* bis void* ist implizite Konvertierung verfügbar. Sie können static_cast verwenden, um die Absicht des Codes zu verdeutlichen. Für die umgekehrte benötigen Sie reinterpret_cast

EDIT: Wie pro Kommentar für den Rückwärts auch static_cast verwendet werden kann. Versuchte einen Beispielcode und kompiliert tatsächlich. Wusste das nicht und nutzte immer reinterpret_cast, um aus einer Lücke zu kommen *.

4

Es ist keine Besetzung, es ist implizite Konvertierung. Casts sind per Definition explizit. Es ist nicht mehr ein Cast als:

char c = 'a'; 
int i = c; 

ist.