Errata zur 4. Auflage (korrigierter Nachdruck 2016)

S. 641, vorletzter Absatz: Der Satzanfang "= default bedeutet dasselbe ..." usw. muss heißen "= default beim Destruktor bedeutet dasselbe ..."

Errata zur 4. Auflage (Erstdruck 2015)

S. 51 Mitte: Die Obergrenze für den Exponenten ist natürlich nicht 21024-1, sondern 210-1 (= 1023).

S. 54 Mitte direkt vor 1.6.5: Vor b, c und d fehlt der Datentyp int.

S. 115 Code-Beispiel: const in der Parameter-Liste streichen.

S. 120: Im Listing 2.9 fehlt using namespace std; (in den herunterladbaren Beispielen ist es richtig).

S. 257: In den Funktionen f() und g() des Listings 5.7 fehlt std:: vor cout (in den herunterladbaren Beispielen ist es richtig).

S. 627: Der richtige Link zu Open-Project ist  https://www.openproject.org/open-source/ .

S. 678: ersetze.exe "\\n" "\\n\\n" text.txt funktioniert mit Boost (Unterverzeichnis regex_boost in den Beispielen), nicht aber mit std::regex (Unterverzeichnis regex). std::regex_replace() interpretiert den Ersetzungstext \n als literale Zeichen \ und n. boost::regex_replace() wandelt hingegen die Escape-Sequenzen entsprechend ECMA-262 21.2.2.10 und 21.2.3.1 um.
Rückreferenzen auf Capturing Groups werden bei Ersetzungen mit einem $-Zeichen markiert. Es muss daher im Beispiel ersetze.exe "(\n)" "\$1\$1" text.txt heißen (Boost akzeptiert auch "\\1\\1").

Musterlösung zu Aufgabe 1.18: Die Wortzahl wird nur richtig bestimmt, wenn nach dem Wort ein anderes Zeichen kommt. Am Dateiende ist diese Bedingung aber nicht zwingend erfüllt. Korrektur: Vor der ersten Ausgabeanweisung mit cout die folgende Anweisung einfügen:

  if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
   // das letzte Zeichen ist in einem Wort, das noch nicht mitgezählt wurde
    ++wortzahl;
  }