C++11 für Programmierer - Rainer Grimm - E-Book

C++11 für Programmierer E-Book

Rainer Grimm

0,0

Beschreibung

Dieser Leitfaden richtet sich an C++-Programmierer, die sich mit dem C++11-Standard vertraut machen möchten. Er zeigt, welche Neuerungen und Erweiterungen der Standard mit sich bringt, wie die neuen Features effizient eingesetzt werden -- und warum C++11 das bessere C++ ist. Das Buch bietet zunächst einen Überblick über die C++11-Features und zeigt dann im Detail, wie Sie die Neuerungen in Ihren Programmen einsetzen können. Behandelt werden die Kernsprache, die Multithreading-Funktionalität sowie die Verbesserungen der Standardbibliothek. Der Autor verfolgt dabei einen praxisnahen Ansatz: Zahlreiche lauffähige Beispielprogramme, die Sie herunterladen können, sollen Sie zum Ausführen und auch zum Modifizieren des Codes ermutigen. Übungsaufgaben helfen Ihnen darüber hinaus, die Theorie optimal mit der Praxis zu verbinden, damit Sie C++11 in Zukunft erfolgreich anwenden können.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 475

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



C++11 für Programmierer

RainerGrimm

Einführung

2011 wurde der neue C++-Standard C++11 veröffentlicht (Stroustrup, 2011). Er ist nach einem guten Jahrzehnt die erste große C++-Neuerung, mit der C++ fit für neue Anforderungen gemacht wird. Rein quantitativ gesprochen, verdoppelt sich der C++-Standard nahezu von knapp 800 auf gut 1.300 Seiten. Da verwundert es nicht, wie Bjarne Stroustrup, der Erfinder von C++, C++11 charakterisiert:

Bjarne Stroustrup über C++11

Surprisingly, C++11 feels like a new language: The pieces just fit together better than they used to and I find a higher-level style of programming more natural than before and as efficient as ever.

(Erstaunlich, C++11 fühlt sich wie eine neue Sprache an: Die Einzelteile passen einfach besser zusammen als gewohnt, und ich finde das Programmieren auf abstrakterer Ebene natürlicher als früher und so effizient wie immer.) (Stroustrup, 2011)

Threading, funktionale Programmierung, automatisches Speichermanagement, reguläre Ausdrücke ... das alles und noch viel, viel mehr ist nun ebenfalls enthalten. Dabei hat C++11 an seine zwei Zielgruppen gedacht.

Für den Einsteiger: einfacher zu lernen durch die vereinheitlichte Syntax und die mächtigen Bibliotheken, mit denen Standardaufgaben leichter erledigt werden können.

Für den Profi: eine bessere Programmiersprache für die Systemprogrammierung und das Schreiben von Bibliotheken durch neue und verbesserte Features der Kernsprache und der Bibliotheken.

Exkurs: C++0x versus C++11

Die bisherigen C++-Standards heißen C++98 und C++03, wobei C++03 nur eine technische Korrektur darstellt. Da war es natürlich naheliegend, dem neuen Standard einen ähnlichen Namen zu geben. Als Arbeitstitel wurde der Name C++0x gewählt. Somit war festgelegt, dass der neue Standard spätestens 2009 erscheinen musste. Leider ließ sich der Zeitplan nicht einhalten. Kurzerhand wurde das Zeichen x in C++0x zur hexadezimalen Zahl erklärt. Sechs zusätzliche Jahre waren durch diesen Kunstgriff gewonnen. Es blieb abzuwarten, welcher Name sich für den neuen Standard durchsetzen würde, der offizielle Name C++11 oder der sehr etablierte Name C++0x.

2013, kurz vor dem Abschluss der zweiten Auflage dieses Buchs, hat sich die Namensverwirrung zugunsten von C++11 in Wohlgefallen aufgelöst. Bjarne Stroustrup bringt es auf den Punkt und nennt den neuen Standard C++11:

Following convention, the new standard is called C++11 (because it was published in 2011) (Stroustrup, 2011).

Daher werden Sie gelegentlich in diesem Buch und in vielen Publikationen zum neuen C++-Standard den langjährigen Arbeitstitel C++0x finden. Lassen Sie sich nicht verwirren. Das Problem lässt sich einfach lösen: C++0x ist C++11.

Ziel dieses Buchs

Die entscheidenden Fragen eines C++-Entwicklers, bevor er sich den Herausforderungen des neuen C++11 stellt, sind meines Erachtens:

Welche Erweiterungen und Neuerungen bringt C++11 mit sich?

Warum ist C++11 das bessere C++?

Wie können die neuen Features möglichst effizient eingesetzt werden?

Mit dem Beantworten dieser Fragen will das Buch überzeugen – überzeugen, dass sich der Aufwand lohnt, sich mit dem neuen C++11 auseinanderzusetzen. Denn was bleibt, ist die Fähigkeit, die anspruchsvolle Programmiersprache C++ auf einem höheren Niveau zu beherrschen.

Zielgruppe

Dieses Buch richtet sich an C++-Programmierer, die sich mit dem neuen C++11-Standard vertraut machen möchten. Zwar setzt das Buch nicht explizit C++ Kenntnisse voraus, um die Theorie und die vielen Beispiele zu verstehen, jedoch lässt sich der große Schritt von C++11 zu C++ am besten ermessen, wenn Sie C++ kennen.

Aufbau dieses Buchs

Das Buch besteht aus den folgenden vier großen Themenblöcken:

Tour de C++11

Neuerungen der Kernsprache

Multithreading mit C++11

Verbesserungen der Standardbibliothek

Einen ersten schnellen Überblick über C++11 gibt Teil I, auf rund 100 Seiten. Darin werde ich die Neuerungen von C++11 vorstellen, ohne besonders in die Tiefe zu gehen. Mit diesem Überblick besitzen Sie die notwendigen Voraussetzungen, um sich mehr mit den Details von C++11 zu beschäftigen, die in den nächsten drei Abschnitten des Buchs folgen.

Los geht es mit Teil II. Kapitel 6 geht auf die verbesserte Usability in C++11 ein: Diese besteht aus der Range-basierten For-Schleife für die einfache Ausgabe oder Modifikation von Containern, der automatischen Typableitung mit auto, aus Lambda-Funktionen und der vereinheitlichten Initialisierung in C++11. Auf die verbesserte Usability folgt der mächtigere Entwurf von Klassen in Kapitel 7. Mächtiger, da C++11 Initialisiererlisten für Konstruktoren, die Delegation und Vererbung von Konstruktoren, aber auch das direkte Initialisieren von Klassenelementen anbietet. Mächtiger, da C++11 explizite Klassendefinitionen mit den Schlüsselwörtern default und delete, override und final, aber auch explizite Konvertierungsoperatoren unterstützt. In Kapitel 8 folgt das auf Performance optimierte Arbeiten mit Containern in Form von Move-Semantik und Perfect Forwarding. Deutlich mächtiger wird in C++11 auch die generische Programmierung, die in Kapitel 9 beschrieben wird. Sie werden Variadic Templates, also Templates mit beliebig vielen Argumenten, Zusicherungen zur Compile-Zeit an den Code und Aliase Templates kennenlernen. Abgeschlossen wird dieser Teil des Buchs zur Kernsprache von C++11 mit den erweiterten Datenkonzepten und Literalen. In Kapitel 10 stelle ich konstante Ausdrücke, die zur Compile-Zeit ausgewertet werden können, unbeschränkte Unions und streng typisierte Aufzählungstypen vor. Weiter geht es mit Raw-String-Literalen, benutzerdefinierten Literalen und der Unicode-Unterstützung in C++11.

Teil III ist der nächste Themenblock des Buchs, der sich den Details widmet. Behandelt werden in den Kapitel 12 bis 18 die atomaren Datentypen von C++11, die Erzeugung und Verwaltung von Threads sowie den Schutz von gemeinsam genutzten Daten durch Mutexe und Locks. Weiter geht es mit Bedingungsvariablen und Thread-lokalem Speicher. Den Abschluss bilden asynchrone Operationen. Mit ihnen lassen sich Tasks für den einfachen Umgang mit Threads definieren.

Bezogen sich die vorherigen Themenblöcke vorwiegend auf den C++11-Kern, so in Teil IV des Buchs die Standardbibliothek unser zentrales Thema. Im Besonderen werden Sie in Kapitel 19 die vielen neuen und verbesserten Bibliotheken kennenlernen. Detailliert vorstellen werde ich Ihnen in Theorie und Praxis die neuen Bibliotheken für das Arbeiten mit regulären Ausdrücken, für die Typintrospektion und -manipulation mit den Type-Traits, für das Erzeugen von Zufallszahlen und für den Umgang mit der neuen Zeitfunktionalität. Den Abschluss dieses Teils bilden die verbesserten Bibliotheken zu den Smart Pointern, zu den neuen Containern wie Arrays, Tupels und Hashtabellen und zu den neuen Algorithmen in Kapitel 20.

Was wäre ein C++11-Buch ohne Ausblick auf die weitere Entwicklung von C++? Genau diese Vorschau will Teil V, geben. Darin erfahren Sie einerseits, warum die wohl wichtigste Neuerung von C++11 – Concepts, ein Typsystem für Templates – aus dem C++11-Standard gestrichen wurde, und andererseits, welche Ziele die nächsten Standards C++14 und C++14 C++1y verfolgen.

Praxistipp

Wie das Buch zu lesen ist

Den ersten Überblick gibt Teil I. Auf rund 100 Seiten werden die neuen Features von C++11 vorgestellt, ohne allzu sehr in die Tiefe zu gehen. Ist das große Bild gezeichnet, ist es Zeit, sich in die einzelnen Komponenten genauer anzusehen und die Tastatur zu nutzen. Die drei weiteren Teile zu den Neuerungen der Kernsprache, zur neuen Threading-Mächtigkeit und zu Verbesserungen der Standardbibliothek bilden den Kern dieses Buchs.

Didaktik

Auf die Suche in der Breite folgt die in der Tiefe. Diesem einfachen Muster aus der Graphentheorie werde ich folgen. Zuerst werde ich die neuen Features vorstellen und dann genauer auf die Details eingehen, um schließlich anhand des einen oder anderen Beispiels sowie im Besonderen mit Übungsaufgaben weiter in die Tiefen vorzustoßen.

Diese Strategie, sich der unbekannten Materie von verschiedenen Seiten und mit immer detaillierterem Anspruch zu nähern, halte ich für einen idealen Ansatz, das Neue zum Vertrauten zu machen. Die größte Gefahr dabei besteht darin, die Redundanz zu übertreiben. Ich hoffe, es ist mir gelungen, diese in Grenzen zu halten.

Übungsaufgaben

Um den größtmöglichen Nutzen aus den Übungsaufgaben zu ziehen, stehen die Musterlösungen der Übungsaufgaben unter Aufgaben zur Verfügung (Download unter http://examples.oreilly.de/german_examples/cplusplusleitfadenger/). Denn nichts hat mich in meinem Mathematikstudium mehr gestört als eine Übungsaufgabe, die nicht lösbar war.

Exkurse

Die vielen Exkurse sind zum Schmökern da. Sie sollen Hintergrundinformationen liefern, ohne den roten Faden des Buchs zu stören. Es schadet daher auch nicht, sie beim ersten Lesen des Werks zu ignorieren.

Anhang

Im Anhang finden Sie weiterführende Informationen, die das Buch abrunden sollen.

Zum einen enthält er die Anleitung dazu, wie Sie einen aktuellen C++-Compiler und die Boost-Bibliothek installieren können. Beides sind notwendige Voraussetzungen, um alle Beispielprogramme in Aktion zu sehen.

Zum anderen finden Sie Hintergrundinformationen zu C++11, die zu umfangreich für einen Exkurs sind. Dies betrifft Themen wie Funktionsobjekte in C++, das bekannte C++-Idiom Anhang C, Promotion Traits, implizit erzeugte Methoden und Operatoren sowie insbesondere die funktionale Programmierung.

Codebeispiele in diesem Buch

Der größte Nutzen lässt sich aus einem Buch zur Programmierung ziehen, wenn die neuen Features in der Anwendung dargestellt werden. Daher werde ich viele Codeschnipsel und lauffähige Programme in dem Werk verwenden und deren Ausgabe präsentieren. Noch mehr Nutzen besitzt das Buch, wenn Sie mit den Codebeispielen arbeiten, sie modifizieren und erweitern. Zur weiteren Vertiefung der neuen Funktionalität schließe ich die Kapitel mit Übungsaufgaben ab, die sich mit den neuen C++11-Features in der Regel komfortabel lösen lassen.

Codekonventionen

Entgegen meiner Gewohnheit werde ich die Codeblöcke nur um zwei Leerzeichen einrücken, um Platz zu sparen. Namensraumbezeichner wie std werde ich, wenn möglich, im Quellcode verwenden. Damit ist eindeutig, zu welchem Namensraum eine Funktion oder Klasse gehört. Zur besseren Orientierung im Quellcode werde ich diesen nummeriert darstellen.

Download der Codebeispiele

Alle Programme sowie die Musterlösungen der Übungsaufgaben des Buchs stehen hier zur Verfügung:

http://examples.oreilly.de/german_examples/cplusplusleitfadenger/

Das trifft auch auf die Programme zu, die mit dem aktuellen GCC 4.7 noch nicht lauffähig sind. Trotz großer Sorgfalt kann es insbesondere bei diesen Programmen vorkommen, dass sich noch der eine oder andere Bug darin eingenistet hat.

Exkurs: Die Beispielprogramme für die regulären Ausdrücke sind auch für die TR1-Erweiterung von Boost vorhanden

Die Programme und Musterlösungen zur neuen Bibliothek für reguläre Ausdrücke stehen auch für die Boost-Bibliothek-Erweiterung (Boost.TR1) zur Verfügung. Diese ist in den Fällen notwendig (inklusive des aktuellen GCC (C++0x/C++11 Support in GCC, 2013)), in denen der Compiler die neue Funktionalität noch nicht anbietet.

Der Name der zusätzlichen Quelldatei ist um den Bezeichner Boost erweitert. So wird aus regex.cpp regexBoost.cpp.

Zwei kleine Eingriffe in den Sourcecode von regexBoost.cpp sind notwendig, um diesen von der Boost- auf die C++11-Notation zu portieren.

Ersetzen Sie den Boost- in den C++11-Header (01 → 02):

01 #include <boost/tr1/regex.hpp> 02 #include <regex>

Ersetzen Sie die TR1- in den C++11-Namensräumen (01 → 02):

01 std::tr1:: 02 std::

Genau genommen ist Schritt 2 nicht immer notwendig, da Sie – falls verfügbar – durch std::tr1:: die TR1-Erweiterung des C++-Standards verwenden, der dem neuen C++11-Standard in diesem Fall entspricht.

Im Anhang gehe ich darauf ein, wie Sie eine aktuelle Build-Umgebung für Windows oder Linux erhalten.

Aktuelle Compiler-Unterstützung

Einen aktuellen C++-Compiler (C++11 Compilers Support, 2013) vorausgesetzt, können Sie sofort loslegen, denn viele Features des neuen Standards stehen schon zur Verfügung.

Das trifft vor allem auf den GCC 4.7-C++-Compiler (C++11 Support in GCC 4.7, 2012) zu, deckt dieser doch nahezu den ganzen C++11-Standard ab. Um möglichst viele neue Features in Aktion zu sehen, werde ich daher auf den GCC 4.7 zurückgreifen. Diverse Beispiele, insbesondere Übungsaufgaben, habe ich mit dem aktuellen C++-Compiler von Microsoft, VC10, entwickelt. Vereinzelt kam auch der Clang-Compiler clang++ 3.1 zum Einsatz (Clang 3.1 Release Notes, 2013).

Abbildung 1 Aktuelle Compiler-Unterstützung für C++11

GCC

Wird bei aktuellen GCC-Compilern das Flag std=c++0x (ab GCC 4.3) bzw. das Flag std=c++11 (ab GCC 4.7) angegeben, verwendet dieser neben der neuen Kernfunktionalität auch die neuen Bibliotheken. Lediglich für die Regulär-Expression- und die Threading-Bibliothek ist noch Bastelarbeit notwendig. Hierzu müssen Sie die Header-Dateien und Bibliotheken aus Boost (Boost.TR1) verwenden. Das ist aber durchaus legitim, dienen diese doch als Grundlage für die aktuelle C++-Bibliothekserweiterung TR1.

Fehlt die Ausgabe eines Listings, liegt das daran, dass der aktuelle GCC 4.7 dieses Feature noch nicht unterstützt. Schwarz auf weiß sehen Sie die detaillierte Übersicht zu den aktuellen GCCs in Abbildung 2 und Abbildung 3.

Abbildung 2 Aktuelle GCC-Unterstützung (Teil 1)

Abbildung 3 Aktuelle GCC-Unterstützung (Teil 2)

Copyright © Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

Microsoft Visual C++

Neben dem aktuellen GCC ist auch das aktuelle Visual C++ 10.0 sehr weit in der Unterstützung des modernen C++11. Tabelle 1 (Lavavej, 2010) von Stephan T. Lavavej, die der Struktur der Abbildung 2 folgt, gibt einen genauen Überblick über Visual C++ 9.0 und Visual C++ 10.0.

Tabelle 1 C++0x Core Language Features in VC9 und VC10

C++0x Core Language Features

VC9

VC10

Rvalue references

No

v2

Rvalue references v2

No

v2

Rvalue references for *this

No

v2

Initialization of class objects by rvalues

Yes

Yes

static_assert

No

Yes

auto

No

Yes

Multi-declarator auto

No

Yes

Removing old auto

No

Yes

Trailing return types

No

Yes

Lambdas

No

v1.0

decltype

No

Yes

Right angle brackets

Yes

Yes

Extern templates

Yes

Yes

nullptr

No

Yes

Strongly typed enums

Partial

Partial

Forward declared enums

No

No

Extended friend declarations

Partial

Partial

Local and unnamed types as template arguments

Yes

Yes

C++0x Core Language Features: Concurrency

exception_ptr

No

Yes

Thread-local storage

Partial

Partial

C++0x Core Language Featues: C99

__func__

Partial

Partial

C99 preprocessor

Partial

Partial

long long

Yes

Yes

Zwei kleine Anmerkungen noch zu der Tabelle: Rvalue-Referenzen Version 2 (v2) beschreibt die Implementierung, die im kommenden C++11 Standard sein wird. Diese Version 2 bildet auch die Grundlage dieses Buchs. Lambda-Funktionen in VC10 weichen nur in Feinheiten (subleties) (Lavavej, 2010) von den C++11-Lambda-Funktionen ab.

Standard

Bei meiner Vorstellung des neuen C++11-Standards habe ich mich auf den neuen Standard »ISO International Standard ISO/IEC 14882:2011(E) Programming Language« C++ bezogen. Dieser wurde formal im August 2011 als neuer Standard zugelassen.

Danksagung zur 1. Auflage

Im Jahr 2009 hielt ich einige Vorträge über C++0x bei meinem Arbeitgeber science + computing ag (science + computing ag, 2011). Für die reichlich konstruktive Kritik danke ich Mathias Fröhlich, Peter Hrenka, Götz Isenmann, Marc Lohrer, Ove Sommer, Daniel Trstenjak, Milosz Walter und den weiteren Teilnehmern der internen Fortbildungsrunde.

Mein Dank gilt Mathias Huber vom Linux Magazin (Linux Magazin), der mich bei meinen zwei Artikeln zu C++0x (Grimm, Erfrischend neu, 2010) und (Grimm, Reichhaltiges Angebot, 2010) redaktionell begleitete.

Danken möchte ich Johannes Schaub und Stefan Reuther, die mir einige Erläuterungen zum neuen C++11-Standard gegeben haben. Mein besonderer Dank gilt Daniel Krügler, Moderator der Newsgruppe de.comp.lang.iso-c++ (de.comp.lang.iso-c++, 2011), der mir zu einem tieferen Einblick in die C++11-Materie verhalf.

Ich danke meiner Lektorin Brigitte Bauer-Schiewek vom Addison-Wesley Verlag, bei dem die 1. Auflage dieses Buchs erschienen ist, sowie meinem Fachlektor Dirk Frischalowski und meiner Sprachlektorin Petra Kienle, die mich bei dem neuen Abenteuer, ein Buch zu schreiben, begleitet haben.

Mein größter Dank gilt natürlich meiner Frau Beatrix und unseren zwei Kindern Juliette und Marius, die mich dabei unterstützten, meinen ganzen Tagesablauf dem Buchprojekt C++11 unterzuordnen.

Danksagung zur 2. Auflage

Viel konstruktive Kritik zu der ersten Auflage dieses Buch habe ich durch die C++-Community erfahren. Vielen Dank insbesondere an Haluk Erce Rodopman, Luc Deknock, Titus von Boxberg, Norbert Eichenseher und Stephan Leibbrandt.

Ich danke der Lektoratsleiterin Ariane Hesse und der Lektorin Alexandra Follenius. Dank ihnen hat mein Buch beim O’Reilly Verlag eine neue und dauerhafte Heimat gefunden.

Errata

Auf meiner Homepage www.grimm-jaud.de finden Sie eine detaillierte Liste meiner Errata. Denn wenn mich die erste Auflage des Buchs etwas gelehrt hat, dann die Einsicht, dass diese Seite leider notwendig ist.

Kontakt

Für Anregungen, Verbesserungen, Kritiken, positiv wie negativ, können Sie mich direkt unter meiner E-Mail-Adresse erreichen:

[email protected]

Teil I. Tour de C++11

Kapitel 1. Die Standardisierung

Ein neuer C++-Standard ist kein alltägliches Ereignis für die C++-Programmiersprache, muss sie doch einen langwierigen Prozess durchlaufen, der in einem neuen ISO-Standard endet. Genau dieser Prozess fand mit C++11 im Jahr 2011 seinen Abschluss. Die einfache Zeitachse in Abbildung 1.1 hilft, den Überblick über die Standardisierung von C++ zu behalten.

Abbildung 1.1 Zeitachse C++

ARM C++

Ende der 80er-Jahre gab es mehrere unabhängige C++-Implementierungen. Daher legte Bjarne Stroustrup 1989 in seinem Buch »The Annotated C++ Reference Manual« (ARM C++) den Funktionsumfang von C++ fest. Dieser erste C++-Standard umfasste insbesondere die zwei wichtigen Features Templates und Ausnahmebehandlungen.

C++98

C++03

Darüber hinaus erfüllte ARM C++ noch eine zweite wichtige Aufgabe. Er bildete die Grundlage für den ISO-C++-Standard ISO/IEC 14882:1998 (C++98). Die Initiative, C++ zu standardisieren, wurde von Hewlett-Packard zusammen mit AT&T, DEC und IBM aufgegriffen. C++98 ist der bis 2011 gültige C++-Standard, sieht man einmal von seiner kleinen technischen Korrektur 2003 (C++03), formal ISO/IEC 14882:2003, ab.

C99

Der aktuell gültige C-Standard, formal ISO/IEC 9899:1999 (C99), erschien nach dem C++-Standard C++98. Dies hat zur Folge, dass der neue C++-Standard C++11 teilweise um die Features von C99 erweitert wurde.

TR1

Der C++ Technical Report 1 (TR1) war der erste große Schritt hin zum neuen Standard C++11. Die C++-Bibliothekserweiterung ISO/IEC TR 19768 wurde 2005 verabschiedet. TR1 ist zwar kein offizieller Standard, beschreibt aber viele Komponenten, die in den offiziellen Standard C++11 aufgenommen wurden. Die neuen Bibliotheken zu regulären Ausdrücken, Smart Pointern, Hashtabellen oder Zufallszahlengeneratoren basieren alle auf TR1 und somit auf den entsprechenden Boost-Bibliotheken. Das Boost-Projekt (boost, 2011), das von Mitgliedern des C++-Standardisierungskomitees gegründet wurde, ist die eigentliche Ideenwerkstatt für die aktuellen Erweiterungen der C++-Bibliothek.

C++11

Zum jetzigen Zeitpunkt – Ende 2013 – hat sich bereits abgezeichnet, welcher Name sich für den neuen C++-Standard durchsetzen wird. Der inoffizielle Name C++0x, der sich in den letzten Jahren etabliert hat, muss dem offiziellen Namen C++11 weichen, der den neuen Namen des ISO-C++-Standards beschreibt.

C++14

Nur drei Jahre nach dem aktuellen Standard C++11 ist mit C++14 ein neuer Standard geplant. Dieser steht in der Tradition von C++03, denn auch die Aufgabe von C++14 besteht darin, Bugs im aktuellen Standard zu beseitigen und C++ intuitiver werden zu lassen.

C++17

Weitere drei Jahre später ist mit C++17 der nächste richtige C++-Standard geplant. Mit ihm soll C++ ein Typsystem für Templates, eine deutlich erweiterte Thread-Funktionalität, Module und viele neue Bibliotheken, beispielsweise zur Netzwerkprogrammierung oder auch zur String-Manipulation, erhalten. Einen tieferen Blick in die Glaskugel wage ich in Kapitel 21.

Demokratischer Prozess

Hinter den neuen Standards C++11 und auch C++98 stehen viel Zeit und eine immenser Aufwand, weil sie nicht auf einer zentralen Autorität wie Sun/Oracle bei Java oder Guido van Rossum, dem wohlwollenden Diktator auf Lebenszeit bei Python, basieren, sondern aus einem demokratischen Prozess hervorgehen. Bjarne Stroustrup beschreibt in seiner Vorstellung bei Google den Prozess als »[...] formal, slow, bureaucratic, and democratic [...]« und fügt noch hinzu: »The worst way, except for all the rest« (Stroustrup, 2007).

Das ISO-Standardisierungskomitee

Das ISO-Standardisierungskomitee besteht aus 160 Mitgliedern, von denen sich ca. 60 Mitglieder dreimal jährlich weltweit zusammenfinden. Diese Teilnehmer kommen aus mehreren Nationen und Organisationen. Jede Organisation besitzt maximal eine Stimme. Die hauptsächliche Arbeit geschieht in vier Gruppen zur Kernsprache und zur Bibliothek und in gut zehn weiteren Untergruppen zu C++. Diese Untergruppen beschäftigen sich mit Themen wie Modulen, Multithreading, dem Dateisystem oder dem Netzwerk in C++. Genaueres lässt sich auf der Homepage des C++-Standardkomitees (C++ Standard Komitee, 2013) nachlesen.

Kapitel 2. Ziele von C++11

C++11 hat viel zu bieten:

Für den Einsteiger: einfacher zu lehren und zu lernen durch die vereinheitlichte Syntax und mächtige Bibliotheken, mit denen Standardaufgaben leichter gemeistert werden können.

Für den Einsteiger

Für den Profi: eine bessere Programmiersprache für die Systemprogrammierung und das Schreiben von Bibliotheken durch neue und verbesserte Features der Kernsprache und der Bibliotheken.

Für den Profi

Abbildung 2.1 Von C über C++ nach C++11

Dabei baut die Multiparadigmen-Programmiersprache C++11 auf den Prinzipien von C++ auf.

Vertraue dem Programmierer.

Zahle nicht für etwas, das du nicht nutzt.

Brich keinen funktionierenden Code.

Kontrolle zur Übersetzungszeit ist besser als zur Laufzeit.

Exkurs: Multiparadigmen-Programmiersprache

Eine Multiparadigmen-Programmiersprache ist eine Sprache, die das Programmieren mit verschiedenen Programmiertechniken unterstützt. Hier kommt die wahre Stärke von C++ und insbesondere C++11 zum Tragen. Die wichtigsten Programmiertechniken in C++ sind schnell genannt.

Als Sprache mit seinen Wurzeln in C unterstützt es:

Prozedurale Programmierung

Strukturierte Programmierung

C++ erweitert C um die Abstraktion:

Objektorientierte Programmierung

Generische Programmierung mit Templates

C++11 führt eine neue Programmiertechnik in die imperative Programmiersprache C++ ein:

Funktionale Programmierung

Stärken und Schwächen von C++

Dies ist die große Stärke und zugleich Schwäche von C++. Der Einsteiger wird vor lauter Werkzeugen nicht wissen, welches am besten geeignet ist, sein Problem zu lösen. Der Profi schätzt die Mächtigkeit, für jedes Problem das adäquate Werkzeug zur Hand zu haben.

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!