Typangleichung bei Operatoren in C++
Bei der Typangleichung bei Operatoren werden die Typen der Operanden vieler Operatoren vor der Verarbeitung zunächst einander angeglichen.
Die Typangleichung wird hier am Beispiel der Division behandelt: Werden zwei ganze Zahlen dividiert, so wird eine spezielle „ganzzahlige Division“ verwendet, deren Ergebnis ebenfalls ganzzahlig ist (der Rest der Division wird dabei einfach vernachlässigt, das Ergebnis ist nur der ganzzahlige Anteil des Quotienten).
Der Ausdruck "1/2" hat den Wert 0, da die Division ganzzahlig erfolgt (wobei der Rest nicht weiter berücksichtigt wird). Dieses Verhalten des Divisionsoperators hat zunächst noch nichts mit einer Typangleichung zu tun.
Im Ausdruck "1./2" oder im Ausdruck "1/2." ist einer der Operanden eine Gleitkommazahl und der andere eine ganze Zahl. Dann wird auch der andere Operand zu einer Gleitkommazahl erweitert wird—das ist nun die Typangleichung. Die Berechnung wird also schließlich wie beim Ausdruck "1./2." als Gleitkomma-Division mit einem Ergebnis von "0.5" durchgeführt.
Explizite Typwandlung und Operatoren
cast.cpp#include <iostream>
#include <ostream>
int main()
{ ::std::cout << static_cast<double>( 1 )/ 2<< '\n'; }::std::cout0.5
Die Priorität des Wandlungsoperators ist höher als die des Divisionsoperators, so daß in dem Beispiel nicht der Wert des Bruchs "1/2" sondern der Wert des Numerals "1" umgewandelt wird. Da bei einer Rechnung mit einer Gleitkommazahl als Operand auch der andere Operand automatisch in eine Gleitkommazahl gewandelt wird (wenn er eine ganze Zahl ist), wird durch die erste explizite Wandlung auch noch eine zweite implizite Wandlung herbeigeführt. Die Division erfolgt dann schließlich als Gleitkommadivision (das Ergebnis ist dann auch eine Gleitkommazahl).
Übungsfrage Welchen Datentyp und Wert hat der Ausdruck »static_cast<double>( 1 / 2 )«?