Open Source im professionellen Einsatz
Linux-Magazin 02/2017

Modernes C++ in der Praxis – Folge 32

Delinquente Typen

Implizite Typkonvertierungen sind eine der Ursachen für undefiniertes Verhalten in C- und C++-Programmen. In Kurzform bedeutet dies, dass solche Programme alles Mögliche tun dürfen und unvorhersehbar reagieren. C++-Routinier Rainer Grimm zeigt, wie C++-Entwickler diese Falle umgehen.

181

Undefiniertes Verhalten heißt für ein Programm, dass es entweder das Richtige tut oder ein vermeintlich falsches Ergebnis liefert oder abstürzt. Kurzum: Alles ist drin. Die C++-Community spricht auch von Catch-Fire-Semantik, sieht also den Rechner sprichwörtlich in Flammen aufgehen. Grund genug, sich mit impliziten Typkonvertierungen zu beschäftigen.

Das große Bild

Im vorigen Artikel [1] lieferte ich zehn Tipps, die guten C++-Code auszeichnen, Abbildung 1 listet sie noch einmal auf. Der aktuelle Artikel stellt die Initialisierung mit geschweiften Klammern, das neue Null-Zeiger-Literal »nullptr« und die Aufzählungen mit Gültigkeitsbereich in den Fokus. Gemeinsam ist allen dreien, dass sie implizite Typkonvertierung in modernem C++ verbieten. Der Artikel zeigt, wie sich das im Detail äußert.

Abbildung 1: Einer der zehn Tipps für guten C++-Code: Vermeide implizite Typkonvertierungen.

Keine Engpässe

Verengung – oder genau gesagt verengende Konvertierung (Narrowing Conversion) – bezeichnet eine implizite Konvertierung arithmetischer Typen unter Verlust der Datengenauigkeit. Das hört sich erst mal gar nicht gut an. Das kleine Beispiel in Listing 1 stellt die Problematik mit klassischer Initialisierung für Built-in-Datentypen nach. Dabei ist es unerheblich, ob der Code die Variable direkt oder durch Zuweisung initialisiert.

[...]

Linux-Magazin Online veröffentlicht alle Print-Artikel, die seit 2001 im Linux-Magazin erschienen sind. Damit steht Ihnen ein hochwertig bestücktes Archiv bis hin zu den Beiträgen der aktuellen Ausgabe online zur Verfügung. Die über 3000 Artikel sind größtenteils kostenlos zugänglich, nur für Beiträge (als PDF) der jüngsten zehn Linux-Magazine ist eine kleine Gebühr fällig.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • C++11

    "Performance matters": Was sich wie ein Glaubensbekenntnis anhört, bleibt ein wichtiges Designkriterium in C++. Mit den neuen Hashtabellen kann der Programmierer richtig Tempo machen.

  • C++11

    Die neue Zeitbibliothek ist ein elementarer Baustein nicht nur für die Mulithreading-Fähigkeit von C++. Mit ihrer Hilfe legt der Entwickler einen Thread bis zu einem definierten Zeitpunkt schlafen oder fordert auf gut Glück ein Lock für eine Zeitspanne an.

  • C++11

    Damit sein Code nicht als Bananensoftware beim Kunden reift, setzt der umsichtige C++-Lieferant auf die Funktion static_assert() und die Type-Traits-Bibliothek. Das dynamische Duo stellt Bedingungen an den Quellcode, die der Compiler zur Übersetzungszeit verifiziert.

  • C++11

    In C++11 lässt sich manches prägnanter formulieren als in klassischem C++. Dieser Artikel zeigt, wie die neue Range-basierte For-Schleife und die automatische Typableitung dabei helfen.

  • C++

    Verantwortung abgeben fällt C++-Entwicklern nicht immer leicht. Dabei trifft der Compiler fast immer die besseren Entscheidungen, wie der vorliegende Artikel zeigt.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.