Kriterien für C++ -Lehrgänge
>722148 Kriterien für Programmiersprachenlehrgänge
>721407 Verbreitete Irrtümer über C++
- Der Lehrgang sollte die ISO -Spezifikation der Sprache C++ erwähnen und erklären, daß er C++ gemäß dieser Spezifikation behandelt. Im Idealfall wird dabei auch noch auf die C -Spezifikation verwiesen, auf die sich die C++ -Spezifikation an einigen Stellen bezieht und erläutert, wie diese beiden Spezifikationen zusammenhängen. (Die C++ -Spezifikationen sind die aktuelle ISO/IEC 14882:2011 und ihre Vorgänger, die ISO/IEC 14882:2003(E) und ISO/IEC 14882:1998(E).)
- Das Buch sollte von Anfang an (und nicht nur in einem Anhang) den aktuellen Stand der Sprache (von 2011) behandeln. Dies kann man daran erkennen, daß in verschiedenen Programmen häufig die universelle Initialisierungsschreibweise mit geschweiften Klammern (»int i{ 5 };«) sowie ab und zu auch »auto« oder »constexpr« verwendet werden.
- Die main-Funktion sollte den korrekten Rückgabetyp »int« haben. Der Rückgabetyp »void« vor »main« wird als ein schwerer Mangel angesehen, weil er zeigt, daß der Autor selbst einfache Grundlagen von C++ nicht kennt.
- Es sollte nicht behauptet werden, daß man C und C++ gleichzeitig als „C/C++“ lernen könne oder sollte.
- Es sollte nicht zuerst C behandelt werden, da man damit einen in C++ oft schlechten Stil lernt. Statt dessen sollte von Anfang an idiomatisches C++ verwendet werden.
- Es sollten in C++ meist unangebrachte C -Idiome (wie beispielsweise die Verwendung der C -Funktion »printf«) weitgehend vermieden. Statt dessen sollten C++ -Idiome (wie die Verwendung des Operators "<<" zur Ausgabe) verwendet und der zum Erlernen von C++ unnötige Umweg über C vermieden werden.
- Als Standardtyp für Gleitkommawerte sollte "double" eingeführt werden (und nicht "float").
- Der Text sollte eine weitgehend an den Standard angelehnte Terminologie (z.B.: „Objekt“ als “region of storage ”) verwenden. (Diese Forderung ist allerdings für das Wort „Objekt“ umstritten: Einige Personen sehen hier eine Abweichung von der Bedeutung nach der ISO -Norm als vorteilhaft an.)
- Die Verwendung von Include -Direktiven in der Schreibweise mit ».h«, wie beispielsweise »iostream.h« (an Stelle von »iostream«) weist auf einen heute veralteten Stand des Lehrganges hin.
- Der Unterschied zwischen der using -Deklaration (wie »using ::std::cout;«) und der using -Direktive (wie »using namespace ::std;«) sollte erklärt werden. Dabei sollten beide normgerecht „using -Direktive“ und „using -Deklaration“ und nicht laienhaft „Befehl“ oder falsch „Anweisung“ genannt werden. Ihre jeweiligen Vor- und Nachteile sollten erörtert werden. Im besten Fall kennt der Leser nach der Lektüre auch noch den etwas subtileren Unterschied zwischen »std::cout« und »::std::cout«.
- Die Programmiersprache C++ legt für den Datentyp »int« keinen bestimmten Wertebereich fest, sondern verlangt nur, daß der Wertebereich dieses Typs mindestens das Intervall [-32767,32767] enthält. Der Lehrgang sollte also auch keinen bestimmten Wertebereich für den Datentyp »int« angeben, sondern vielmehr richtig wiedergeben, daß dieser Wertebereich in C++ durch die Spezifikation nicht eindeutig bestimmt ist.
- Das Lehrgang sollte nach 1998 erschienen sein (vorher gab es noch keine C++ -Norm, so daß ältere Bücher einen veralteten Stand der Sprache beschreiben). Möglichst nach 2011, um das aktuelle C++ zu behandeln.
- Möglichst im Register zu finden sein—oder wenigsten behandelt werden—sollten die Begriffe „undefiniertes Verhalten“, „unspezifiziertes Verhalten“, „Sequenzpunkt“ oder „sequenzieren“ (insbesondere die Problematik mehrfacher Schreibzugriffe auf ein Objekt zwischen zwei Sequenzpunkten) und „L-Wert“ (“l-value ”, „Linkswerte“).
- Auch die Begriffe „Deklaration“ und „Definition“ sollten erklärt und gegeneinander abgegrenzt werden.
- Falsch ist es, wenn die Darstellung »\n« für ein Zeilenende so erklärt wird, daß sie die Ausgabe eines Zeilenendzeichens „bewirke“, denn dieses Zeichen kann ja auch nur intern verarbeitet werden, ohne daß es unbedingt ausgegeben werden muß. Der Ausdruck »::std::cout« bezeichnet in C++ ein Exemplar einer bestimmten Klasse, er ist aber nicht—wie auch schon zu lesen war—ein „Ausgabebefehl“. Im besten Fall wird behandelt, daß die Ausgabe des Zeichens »\n« in eine Textdatei nicht immer dieselben Codes in diese Datei schreibt, sondern bei einer Textdatei die Ausgabe umgebungsspezifischer Codes zur Darstellung eines Zeilenendes bedeuten kann.
- Der Lehrgang sollte die (oben verbundenen) häufigsten Irrtümer über C++ nicht selber verbreiten, sondern richtigstellen.