Zum Inhalt springen
Topos Uranos

Zusammenfassung

Ein Typ legt nicht nur fest, wie viele Bytes ein Datum belegt, sondern auch, wie seine Bits gelesen werden: Dasselbe Byte ist für ein char der Buchstabe „A“ und für ein int die Zahl 65. Diese Lektion ergänzt die Grundtypen um die Zeichen und die booleschen Werte und untersucht den Übergang von einem Typ zum anderen: die impliziten Konvertierungen, die der Compiler ungefragt vornimmt und die Information verlieren können; die explizite Konvertierung mit static_cast; und die Initialisierung mit geschweiften Klammern, die Verluste zurückweist. Sie schließt mit den Konstanten, const und constexpr, die eine Absicht („dieser Wert ändert sich nicht“) in eine Garantie verwandeln, die der Compiler prüft, und mit den Literalen und auto, die den Typ eines im Quellcode geschriebenen Wertes bestimmen.

Lernziele

  1. Den Zeichencode eines Zeichens zum Rechnen verwenden, etwa um den Wert einer als Zeichen gelesenen Ziffer zu erhalten.
  2. Das Ergebnis einer impliziten Konvertierung zwischen ganzen Zahlen, reellen Zahlen und booleschen Werten vorhersagen und die explizite Konvertierung mit static_cast schreiben.
  3. Erklären, warum die Initialisierung mit geschweiften Klammern die Konvertierungen zurückweist, die Information verlieren, und was GCC in jedem Fall tut.
  4. Jeden Wert, der sich nicht ändern darf, mit const oder constexpr deklarieren und die beiden Schlüsselwörter unterscheiden.
  5. Den Typ eines Literals (5, 5u, 5.0, 5.0f, '5', "5") ableiten, ebenso den Typ, den auto ihm zuweist.

Der Typ als Deutung

Die Lektion Variablen und Speicher stellte die Variable als Speicherzelle mit Namen, Typ und Wert vor, und die Lektionen Ganze Zahlen und ihre Darstellung und Gleitkommazahlen zeigten, dass in der Zelle keine Zahlen liegen, sondern Bits, und dass der Typ sagt, wie sie zu lesen sind. Diese Lektion führt den Gedanken zu seiner Folgerung: Wenn der Typ die Leseregel ist, dann bedeuten dieselben Bits je nach dem Typ, mit dem man sie liest, Verschiedenes, und einen Wert von einem Typ in einen anderen zu überführen, was in C++ Konvertierung heißt, bedeutet, die Regel zu wechseln. Manche Konvertierungen erhalten den Wert (die ganze Zahl 7 wird ohne jeden Verlust zur reellen Zahl 7.0); andere verändern ihn (die reelle Zahl 2.7 wird zur ganzen Zahl 2). Daraus ergibt sich die Frage, die die ganze Lektion durchzieht: Bleibt bei jeder Konvertierung der Wert erhalten, und wer prüft das?