Errata zur 5. Auflage

S. 51, achte Zeile von unten: Streichen Sie den Text "nach den Zahlen s1 und s2 ". .

S. 82 oben: Streichen Sie die Deklaration , sum = 0 im Initialisierungsteil der Schleife. Initialisieren Sie in der Zeile davor die Variable sum mit 0. "Theoretisch ... usw." muss ersetzt werden durch:
"Der Kommaoperator trennt die zwei Ausdrücke sum +=i und ++i, die nacheinander abgearbeitet werden."

Im abgedruckten Beispiel wird das äußere sum durch das innere überdeckt. Die äußere Variable wird damit in der Schleife nicht verändert und bleibt undefiniert. Das Komma zwischen den beiden Deklarationen int i = 1, sum =0 ist nicht der Kommaoperator.

S. 85, kurz nach der Mitte: Die anonyme Typdefinition funktioniert nur für das klassische enum, also ohne class.

S. 88 Mitte: Übung 1.10 ist auf der falschen Seite. Sie gehört nach Seite 94 unten, direkt vor Übung 1.11.

S. 100: Ergänzung zum Abschnitt Bitfelder, 1. Absatz: Die Konstante gibt die Zahl der Bits an (ergibt sich sonst nur indirekt aus dem Anfang des nächsten Absatzes). Bitfelder sind Elemente einer Struktur. Auch int Bitfeld : 13; gehört daher in eine Struktur (Beispiel siehe Programm). Die Werte von Bitfeldern werden oft in der Oktal- oder Hexadezimalnotation geschrieben.

S. 105, 2. Punkt oben: Die exklusive Nutzung einer Datei wird nicht automatisch garantiert. Es muss heißen: "Benutzen Sie eine zu beschreibende Datei exklusiv, d.h. sie darf nicht gleichzeitig von anderen Programmen beschrieben oder gelesen werden."

S. 106, Satz nach dem Listing 1.30: Ersetze if(!datei.good()) durch datei.good().

S. 107 unten. Dort wird empfohlen, bei Wiederbenutzung einer Datei nach close() die Funktion clear() aufzurufen. Tatsächlich galt das bis einschließlich C++14. Seit C++17 ist das nicht mehr notwendig, weil nach einem fehlerfreien Öffnen der Datei clear() automatisch aufgerufen wird.

S. 154, letzte Zeile des ersten Absatzes 2.8.2: ersetze "seine" durch "seien".

S. 173 : Der Kopierkonstruktor würde dreimal aufgerufen, wenn nicht nur die Funktion ortsverschiebung() betrachtet würde, sondern auch die Konstruktion des Objekts verschobenerOrt. Das Ergebnis der Funktion ist temporär (ein R-Wert), weswegen dieser Aufruf seit C++17 in jedem Fall wegoptimiert wird. Die Unterscheidung im Verhalten zu vorherigen C++-Versionen fehlt im Absatz in der Mitte der Seite 173. Weil in der Funktion eine Kopie des Arguments einOrt benötigt wird, kann der Kopierkonstruktor für dieses Argument nicht wegoptimiert werden. Etwas anderes gilt für den Rückgabewert. Wenn es einen Move-Konstruktor gäbe (Abschnitt 11.3.1), würde dieser für den Rückgabewert aufgerufen.

S. 182, zweite Zeile: ersetze k durch k1.

S. 259: Die beiden Zeilen ganz oben müssen heißen:
MeinString nochEinString("xyz");
nochEinString = einString;
Unterhalb der Seitenmitte muss im Listing die nicht deklarierte Variable len durch den Aufruf der Methode length() ersetzt werden (zwei Mal).

S. 315, zweiter Absatz von unten: Den ersten Satz ersetzen durch
"Auf welches Subobjekt soll der Zeiger ZeigerAufGrafischeObjekte[2] in Listing 6.25 verweisen?"

S. 316, Listing 6.28: Der Parameter für string_view muss einen anderen Namen haben, etwa beschriftung, der dann auch bei der Initialisierung von BeschriftetesObjekt verwendet wird. In den downloadbaren Beispielen ist es korrekt.

S. 403, Listing 8.55 unten: statt static_cast muss es dynamic_cast heißen. Alternativ ist eine Ergänzung mit typeid möglich, wie in den Listings 8.53 und 8.54.

S. 436. Der letzte Satz des Abschnitts direkt vor 10.1 muss heißen: Dadurch reduziert sich der notwendige programmiertechnische Aufwand (z.B. für eine Bibliothek) von n*k auf n+k (k Algorithmen + n Container-Schnittstellen), eine erhebliche Ersparnis.

S. 537, Abschnitt 16.2.1: Laden Sie Qt nicht von der angegebenen Webseite herunter. Folgen Sie stattdessen den Anweisungen in der Datei cppbuch/k16/README.tx der heruntergeladenen Beispiele. Begründung: Es ist nicht mehr garantiert, dass die genannte Webseite eine MinGW-Variante der neuesten Qt-Version enthält.

S. 596, Zeile 2: Diese Deklaration vor den Beginn der while-Anweisung auf S. 595 unten verschieben.

S. 633, Listing 20.6: Der Test ist fehlerhaft. Korrektur: Schaltjahr berücksichtigen.

S. 666, Listing 22.4: Ersetze "Klasse1() {" durch "Klasse1()".

S. 946, sechste/siebte Zeile: Es muss heißen: ... mit Ausnahme der Ränge 3 und 15 bis 17, ...

XCode 10.0 Problem mit Boost 1_64

S. 961-962: Für das Buch wurde XCode 9 mit Boost 1_64 getestet. Nach dem Update auf XCode 10.0 lassen sich die Beispiele, die Boost verwenden, nicht mehr fehlerfrei übersetzen. Abhilfe: Boost 1_68 installieren. Dazu laden Sie sich boost_1_68_0.tar.gz von Boost herunter. MacOS entzippt die Datei bereits, sodass im Download-Verzeichnis eine tar-Datei liegt. Entpacken Sie die Datei mit
tar xvf boost_1_68_0.tar
Weitere Schritte siehe Abschnitt A.9.1 auf Seite 962.