Sprachkonzepte
Preprozessor
Operatoren
Kontrollstrukturen
Typen
OOP
Bibliotheken
|
Casting ()
Dieser Teil von ManderC ist noch in Bearbeitung
Der explizite Casting-Operator wird verwendet, um dem Compiler eine gewünschte Um-Interpretation gegebener Daten mitzuteilen. Bei den eingebauten Basistypen von C und C++ führt dies gegebenfalls zu einer arithmetischen Umwandlung.
Casting möglich:
- Typen, die den eingebauten Basistypen von C und C++ entsprechen (
void, bool und die numerischen Typen wie int und float), können ineinander umgewandelt werden. Man beachte, dass je nach Mächtigkeit eines Typs möglicherweise Werte verloren gehen können, Beispielsweise beim Casting einer Fliesskommazahl auf einen integralen Wert.
- Integrale Typen können in Pointer gecastet werden und umgekehrt. Man beachte jedoch, dass dies in der modernen Programmierung als unschön betrachtet wird und aufgrund der Fehleranfälligkeit von vielen Programmierern vermieden wird. Moderne Compiler geben Warnungen aus, wenn ein solches Casting nicht explizit im Code deklariert ist.
- Pointer können in andere Pointer gecastet werden, allerdings geben moderne Compiler Warnungen aus, falls das Casting nicht explizit im Code deklariert ist.
- Die Qualifikatoren
const, volatile und restrict können beliebig hinzugefügt oder entfernt werden.
- In C++ ist es möglich, einen Pointer
A* in einen Pointer B* umzuwandeln, wenn die Klasse B von der Klasse A abgeleitet ist.
- In C++ ist es möglich, mittels Konstruktoren Umwandlungen von beliebigen Typen zu definieren. Man beachte hierbei, dass der Copy-Konstruktor implizit für jede Klasse deklariert wird, sofern er nicht vom Programmierer ausprogrammiert wird, jedoch beispielsweise der Konstruktor, der einen Pointer auf einen Typ annimmt, nicht implizit definiert wird.
- Durch Operatorenüberladung können in C++ fast beliebige Castings definiert werden.
Casting nicht möglich:
- Das Casten eines Nicht-Pointer-Typs auf einen Pointer ist nicht möglich. In C++ ist auch das Casten von Referenzen auf Pointer nicht möglich.
- Die Umwandlung von einem Pointer
B* in einen Pointer A* ist nicht möglich, wenn die Klasse B von der Klasse A abgeleitet ist.
|