Sie sind hier: Buchauszüge Typwandlungen  
 BUCHAUSZÜGE
Vorwort
Inhaltsverzeichnis
Einführung
Typwandlungen

EINFÜHRUNG
 
&&

Als Programmierer erwartet man intuitiv, dass eine Initialisierung wie die der Variablen d in den Zeilen

 

void f( int i_in )

{

  double d = i_in;         // OK!

  ...

}

 

ohne weiteres funktioniert. Dass dabei eine Typwandlung von int nach double erforderlich ist, soll den Programmierer nicht interessie­ren: der Compiler soll die erforderliche Wandlung selbständig einfü­gen. In der Regel ist eine Wandlung von int nach double problem­los, da sie normalerweise werterhaltend (value-preserving) durchge­führt werden kann. Den Fall, dass ein bestimmter integraler Wert nicht exakt als Flieskommazahl repräsentiert werden kann, muss je­doch prinzipiell bedacht werden (s.u.).

Nicht mehr ganz so einfach ist es im umgekehrten Fall: die Initialisie­rung eines int mit einem double wirft Fragen auf. Welchen Wert soll i nach der Anweisung

 

int i = 2.999;

 

erhalten? In Frage kommen theoretisch die Werte 2 und 3. Sowohl Auf- als auch Abrunden produziert ein falsches Ergebnis, d.h. die Konvertierung kann nicht werterhaltend durchgeführt werden.

Eine weitere Variante liegt bei der Anweisungsfolge

 

void f( long  l_in )

{

  int i = l_in;     // ???

  ...

}

 

vor. Ist der Wert von l_in klein genug, kann er problemlos in ein int gewandelt werden. Ist long jedoch ein breiterer Datentyp als int, können entsprechend große long-Werte auftreten, die nicht mehr in einem int repräsentiert werden können.

Ein ähnlicher Fall liegt bei einer Konvertierung von int nach char vor:

 

void f( int i_in )

{

  char c = i_in;    // ???

  ...

}

 

Der Standard macht für alle diese Fälle Aussagen, wie die Konvertie­rungen ablaufen sollen. Die Vorschriften sind „erwartungsgemäß“, d.h. es sollte immer das Naheliegendste passieren. Wir behandeln diese sog. Standardkonvertierungen daher nur kurz.




Typwandlungen | Standardkonvertierungen