Handbuch zur dynamischen Ablaufverfolgung in Solaris

Typumwandlungen

Bei der Konstruktion von Ausdrücken mit Operanden unterschiedlicher, aber kompatibler Typen werden Typumwandlungen zur Bestimmung des Typs des resultierenden Ausdrucks vorgenommen. Die D-Regeln für Typumwandlungen stimmen mit den Regeln für die arithmetische Konvertierung von Ganzzahlen in ANSI-C überein, die auch als normale arithmetische Umwandlungen bezeichnet werden.

Die Umwandlungsregeln lassen sich auf einfache Weise wie folgt beschreiben: Jeder Integer-Typ hat eine Priorität nach der Rangfolge char, short, int, long, long long. Dabei hat ein vorzeichenloser Typ gegenüber seiner vorzeichenbehafteten Entsprechung eine höhere, gegenüber dem in der Rangfolge nächsten Integer-Typ aber eine niedrigere Priorität. Wenn Sie einen Ausdruck mit zwei ganzzahligen Operanden wie x + y formulieren und die Operanden unterschiedliche Integer-Typen aufweisen, wird dem Ergebnis der Typ des Operanden mit der höchsten Priorität zugewiesen.

Sollte eine Umwandlung erforderlich sein, wird der in der Rangfolge niedrigere Operand zunächst auf den nächst höheren Typ erweitert. Durch die Typerweiterung wird der Wert des Operanden nicht wirklich geändert: Es erfolgt lediglich eine Erweiterung seiner Wertemenge im Einklang mit dem Vorzeichen des Werts. Bei einer Typerweiterung eines vorzeichenlosen Operanden werden die nicht verwendeten höherwertigen Bits in der resultierenden Ganzzahl mit Nullen aufgefüllt. Bei einer Typerweiterung eines vorzeichenbehafteten Operanden werden die nicht verwendeten höherwertigen Bits durch eine Vorzeichenerweiterung angefüllt. Wenn ein vorzeichenbehafteter Typ in einen vorzeichenlosen umgewandelt wird, erfolgt zunächst eine Vorzeichenerweiterung des vorzeichenbehafteten Typs und anschließend erhält dieser den neuen, durch die Umwandlung bestimmten vorzeichenlosen Typ.

Integer- und andere Typen können auch explizit von einem Typ in einen anderen umgewandelt werden. Die explizite Typumwandlung wird auch als Cast bezeichnet. In D ist die explizite Typumwandlung von Zeigern und Ganzzahlen in beliebige Integer- oder Zeigertypen, nicht aber in andere Typen möglich. Die Regeln für das Casting und die Typerweiterung von Zeichenketten und Zeichenvektoren werden in Kapitel 6Zeichenketten besprochen. Eine explizite Typumwandlung einer Ganzzahl oder eines Zeigers erfolgt anhand eines Ausdrucks wie diesem:

y = (int)x;

wobei der Zieltyp eingeklammert ist und als Präfix für den Ausgangsausdruck dient. Die explizite Typumwandlung von Ganzzahlen in höherwertige Typen erfolgt über eine Typerweiterung. Zur expliziten Typumwandlung von Ganzzahlen in niederwertige Typen werden die überschüssigen höherwertigen Bits in der Ganzzahl mit Nullen aufgefüllt.

Da D keine Gleitkomma-Arithmetik zulässt, ist auch keine implizite oder explizite Umwandlung von Gleitkomma-Operanden erlaubt und sind keine Regeln für die implizite Gleitkomma-Typumwandlung definiert.