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, ...
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.