| Axel Rogat |
| Objektorientiertes Programmieren mit C++ und JAVA |
|   |
4.1: Lvalues
| Kapitel 4 |
5.1: Anweisungen 
|
|   |
|   | 4.12 Typumwandlungen |   |
|   |
An diversen Stellen in einem Programm werden kommentarlos implizite Typumwandlungen durchgeführt, die meistens erwünscht sind, manchmal auch nicht (wir sehen später, wie man das bei eigenen Typen mit dem Schlüsselwort explicit verhindern kann).
Andererseits treffen oft unterschiedliche Typen in Ausdrücken oder
Zuweisungen so aufeinander, daß der Compiler die gewünschte
Interpretation nicht erraten kann. Dann kann der Programmierer explizite
Typumwandlungen einsetzen.
bool gilt auch als kleiner als int und wird in die
int-Werte 0 bzw. 1 ungewandelt.
Bei
wird vom Compiler noch gewarnt, bei
nicht mehr, und bei Zweierkomplement-Darstellung hat u hinterher
meistens einen der Werte 216-1=65535 oder
232-1=4294967295.
ist dabei problemlos, während umgekehrt Überläufe und
Genauigkeitsverluste auftreten können.
Bei der umgekehrten Richtung wird nicht gewarnt, es kann bei großen
long-Werten, die nach float gewandelt werden, aber
Genauigkeitsverluste geben (IEEE-32 hat nur 23 Mantissenstellen).
Typumwandlungen, deren Art erst zur Laufzeit bestimmt wird, heißen
dynamische Typumwandlungen und sind (für "verwandte" Klassen)
mit dem Operator dynamic_cast möglich, der (viel) später
besprochen wird.
Hier wollen wir uns nur mit statischen Typumwandlungen beschäftigen,
d.h. solchen, die zur Übersetzungszeit festgelegt werden.
Die C-typischen Casts mit () sind in C++
natürlich immer noch erlaubt, es werden aber darüber hinaus
speziellere Operatoren mit neuen Schlüsselwörtern zur Verfügung
gestellt.
Das ist der "Ersatz" für die normalen Casts aus C.
Mit static_cast<T>(a) kann ein Ausdruck a
vom Typ A in den Typ T umgewandelt werden. Das ist nur
in speziellen Fällen erlaubt, nämlich:
Das const-Verhalten sollte so nicht umgecastet werden, im zweiten
Fall ist es sogar verboten. Dazu gibt es den nächsten Operator.
Außer im letzten Fall kann so nicht in Referenztypen umgewandelt werden,
so daß man keine Lvalues als Ergebnis erhält.
4.12.1 Standardumwandlungen
Sie werden vom Compiler in Zuweisungen (auch in der Initialisierung und
bei Funktionsargumenten) und innerhalb von Ausdrücken automatisch
angewandt. Dazu gehören folgende Erscheinungen:
4.12.2 Explizite Typumwandlungen
Der Operator für eine explizite Typumwandlung wird auch als
Cast bezeichnet (und der Vorgang als Casting).
|   |
4.1: Lvalues | Startseite |
5.1: Anweisungen 
|
|   |