Wie Sie aus dem letzten Kapitel wissen, wird der Type einer Variablen bei der Deklaration festgelegt. Manchmal ist es jedoch erforderlich, einen Wert in einen anderen Typ zu konvertieren. In C++ wird dieses Verfahren der Typumwandlung Type-Casting genannt. Hierfür stehen zwei unterschiedliche Verfahren zur Verfügung:
- Implizite Typumwandlung – In diesem Fall nimmt der Compiler eine automatische Konvertierung von einem zum anderen Datentyp vor. Das geschieht zum Beispiel wenn Sie einer int-Variablen einen float-Wert oder einer float-Variablen einen double-Wert zuweisen. Implizit hat hier die Bedeutung von „mit enthalten“.
- Explizite Typumwandlung – Die Konvertierung des Datentyps wird explizit (ausdrücklich) vom Programmierer festgelegt.
[sc name=“adsense_InText_ad“]
Explizite Typumwandlung durch den static_cast-Operator
Anders als bei der impliziten Typumwandlung wird eine explizite Umwandlung im Programmcode vorgenommen. Die einfache Syntax hierfür lautet:
variablen-name = (zieltyp) variablen-name;
Dies ist die herkömmliche Form des Casting, wie es in der Programmiersprache C vorgenommen wird. Eine neuere Alternative in C++ benutzt eckige Klammern und den static_cast-Operator, wie in diesem Beispiel:
variablen-name = static_cast <zieltyp> variablen-name;
In der neueren Version lassen sich Typumwandlungen im Quellcode einfacher identifizieren außerdem führen die runden Klammern in komplexen Ausdrücke eher zu Verwirrungen. Die neue Form ist der alten vorzuziehen, obwohl diese immer noch weit verbreitet ist.
Eine Typumwandlung ist oft erforderlich um ein genaues arithmetisches Ergebnis zu erhalten. Wie Sie wissen, produziert die Division eines Integer-Wertes durch einen anderen ein Integer-Ergebnis. Mit anderen Worten, wenn Sie 7 durch 2 teilen erhalten Sie eine 3, der Rest wird nicht gerundet sondern abgeschnitten. Um das genaue Ergebnis zu erzielen muss das Ergebnis deshalb in einen anderen Datentyp, wie zum Beispiel float, umgewandelt werden.
float ergebnis = (float) 7/2;
oder
float ergebnis = static_cast <float> 7/2;
In diesem Fall reicht es auch aus, den ersten Operatoren in einen anderen Datentyp umzuwandeln, so dass der Ausdruck auch so geschrieben werden kann:
float ergebnis = static_cast <float> (7)/2;
Würden Sie den Ausdruck (7/2) verwenden, würde zuerst eine arithmetische Division durchgeführt, das Ergebnis hinter dem Komma abgeschnitten und danach würde der Wert in eine float-Variable umgewandelt – ein Ergebnis, dass so nicht gewünscht ist.
Dieser Artikel ist Teil unseres kostenlosen Workshops “C++ Programmieren lernen” – Geeignet für Einsteiger und Fortgeschrittene. Machen auch Sie mit und lernen Sie in 50 Artikeln, wie Sie Programme selbst schreiben!
Artikelbild: Fotolia / bramgino