Manchmal kommt man in die Situation dass man mehr über eine Variable weiß als der Compiler. zB wollen wir einen float einem int zuweisen. Der Compiler warnt uns und sagt, dass wir möglicherweise Daten verlieren könnten (er meint damit die Nachkommastellen des floats, denn die passen ja nicht in den int hinein). Doch es kann sein, dass wir genau das wollen (weil wir den float zB gerade runden, bzw. uns die Nachkommastellen nicht interessieren). Dann würde uns diese Warnung vom Compiler stören, denn wir ignorieren nie eine Warnung des Compilers (denn das kann fatale Folgen haben).
Wir müssen dem Compiler nun sagen, dass wir wissen was wir tun. Wir sagen ihm, dass diese float als int behandelt werden soll, egal was der Compiler glaubt zu wissen. Dies geschieht mittels eines casts.
int main()
{
float f=3.14f;
int falsch=f; // produziert warnung
int pi=static_cast<int>(f); //besser
}Mittels static_cast können wir casten. In den spitzen Klammern < und > steht der Zieltyp, also in den wir konvertieren wollen.
Es gibt noch weitere casts: reinterpret_cast, dynamic_cast und const_cast. Doch diese werden erst später behandeln. (momentan sind sie für uns unwichtig).
Es gibt noch 2 weitere Arten wie man casten kann:
float f=3.1415f;
int i=(int)f; //c style cast
int j=int(f); //function style cast
Diese beiden Casts funktionieren zwar auch, allerdings casten sie immer - auch wenn eine Konvertierung garnicht sinnvoll ist. Deswegen sollte man in C++ besser die 'neuen' casts wie static_cast verwenden.
Welchen Typ hat eigentlich die Konstante 3.1415? Sie ist ein double, aber was wenn wir wollen dass sie ein float ist? static_cast<float>(3.1415); würde gehen, wäre aber ein bisschen blöd zu lesen. Deswegen gibt es Typmodifizierer. Mittels 3.1415f zeigt man an, dass diese Zahl ein float ist. f steht für float, u für unsigned, l für long.