Casting-Zeiger von einem Basistyp zu einem anderen

8

-EDIT -

Danke für die schnelle Antwort, ich hatte wirklich seltsame Probleme mit meinem Code und ich änderte meine Umwandlungen in dynamic_cast und es funktioniert nun perfekt

-ORIGINAL POST -

Ist es sicher, einen Zeiger einer Basisklasse auf eine andere Basisklasse zu übertragen? Um dies etwas zu erweitern: Wird der Zeiger, den ich im folgenden Code markiert habe, nicht zu undefiniertem Verhalten führen?

%Vor%     
Raphael 16.07.2012, 16:30
quelle

2 Antworten

12
  

Wird die Verwendung dieses Zeigers zu undefiniertem Verhalten führen?

Ja. Der C-Style-Cast versucht nur die folgenden Cams:

  • const_cast
  • static_cast
  • static_cast , dann const_cast
  • reinterpret_cast
  • reinterpret_cast , dann const_cast

Es wird reinterpret_cast verwenden und die falsche Sache machen.

Wenn Base2 polymorph ist, d. h. virtual -Funktionen hat, ist der korrekte Cast hier dynamic_cast .

%Vor%

Wenn es keine virtuellen Funktionen hat, können Sie diese Umwandlung nicht direkt ausführen und müssen auf Derived first reduzieren.

%Vor%     
R. Martinho Fernandes 16.07.2012, 16:32
quelle
0

Sie sollten dynamic_cast operator verwenden. Diese Funktion gibt null zurück, wenn Typen inkompatibel sind.

    
flamingo 16.07.2012 16:33
quelle

Tags und Links