Ich wollte C ++ für eine Weile lernen und nahm AP Computer Programming in der High School (damals, als es C ++ und nicht Java war). Ich mag C und habe gerade nicht die Zeit gefunden, C ++ zu lernen, oder ich greife einfach auf C # zurück, wo ich viel produktiver bin.
Meine Frage lautet: Angesichts der Tatsache, dass C ++ '11 genehmigt wurde (obwohl ich weiß, dass es nicht vollständig implementiert ist), ändert sich dadurch die Art und Weise, wie ich mit dem Erlernen von C ++ umgehen soll? Ich besitze C ++: The Complete Reference von Herb Schildt aus dem Jahr 1998. Macht es der neu genehmigte Standard weniger wichtig, aus solchen Büchern zu lernen als einige der neueren Tutorials / Bücher, die Dinge aus dem Standard enthalten? Hat es einen Vorteil, aus den älteren Büchern zu lernen?
Antworten:
Absolut. Heutzutage sollten sich drei Dinge, die normalerweise in Lektion 2 enthalten sind, sehr viel später bewegen:
Diese Dinge, die normalerweise in Lektion 99 enthalten sind, sollten sich viel früher bewegen
Jeder rohe Zeiger sollte sofort einem intelligenten Zeiger-Wrapper übergeben werden (ich würde mit "shared" beginnen und später als "unique" betrachten, da dazu die Referenzen std :: move und rvalue erklärt werden müssen). Auf diese Weise fühlt sich das Erlernen von C ++ wie das Erlernen von Java oder C # an, bei dem Sie die Bibliothek gleichzeitig mit der Sprache erlernen. Es wird auch viel Gedächtnisarbeit wegnehmen und die Leute weniger besorgt über Fallstricke sein lassen.
Ich würde auch Lambdas in das Bild einarbeiten, wenn wir zum ersten Mal durch eine Sammlung iterieren und mit jedem Element etwas anfangen wollten.
Haftungsausschluss: Ich schreibe gerade einen C ++ - Kurs für Pluralsight und benutze diesen Ansatz. Das letzte Modul ist das "Verstehen des Codes anderer Leute" und hier werde ich die verwirrenden Dinge wie Zeichenketten, manuelle Speicherverwaltung, Zeigerarithmetik und so weiter platzieren.
Update: Einige Leute haben gefragt, warum die Existenz von C ++ 0x Lehrinhalte inspiriert, die mit C ++ 03 hätten vermittelt werden können. Ich denke, es ist eine Reihe von Dingen:
>>
korrekte Parsen beseitigt das GOTCHA, das beim Deklarieren einiger Vorlagen von Vorlagen vorhanden wäreSo wie ich das sehe, gibt es Dinge, die wir an der Art und Weise, wie wir C ++ unterrichteten, vor einiger Zeit hätten ändern können, aber einige von uns hielten sich zurück, weil wir immer noch den Old-School-Weg für einen Fallback brauchten oder weil das Unterrichten einfach viel bedeutete des arkanen Wissens.
quelle
std::for_each()
viel populärer als früher ist,auto
sehr wichtig ist und die neue Syntax der Funktionsdeklaration (in Verbindung mitdecltype
) im Vorlagencode ziemlich häufig verwendet wird. Das sind Dinge, die kein aktuelles C ++ - Buch lehrt. Aber im Allgemeinen stimme ich Ihnen zu (+1
). Als ich angefangen habe, C ++ - Kurse zu geben, habe ich mit Accelerated C ++ angefangen , und obwohl mein Kurs immer mehr davon abweicht, bleibt er dem zugrunde liegenden Prinzip treu.Ziemlich genau, ja. Die einfache Tatsache ist, dass in C ++ 98 und 03 viele bewährte Methoden aufgrund der schlechten Qualität der Sprachunterstützung für z. B. funktionale Programmierung grundsätzlich unbrauchbar waren. Jetzt, wo Lambdas existieren und funktionieren, neigen die Menschen dazu, funktionale Schnittstellen viel besser zu akzeptieren als früher, und die generische Programmierung ist noch stärker als zuvor.
Im Jahr 1998 begannen die Leute erst zu entdecken, wie man mit C ++ hochwertigen, sicheren und schnellen Code schreibt, und eine Menge Code lautete "C was Classes". In C ++ 11 gibt es sehr unterschiedliche Ausdrücke wie Kopieren und Vertauschen und die Dreierregel (jetzt Fünf) ist bekannt und definiert, und viel mehr Ressourcenverwaltungstypen sind zu Standards geworden, wie
shared_ptr
undunique_ptr
wo die vorherigen Standards sie einfach verlassen haben als klaffende Löcher.Sie können diese Frage für eine hervorragende Liste von Referenzmaterial in C ++ anzeigen .
quelle
+1
von mir.Ich kenne das spezifische Buch nicht, das Sie erwähnen. Im Allgemeinen kann man jedoch sagen, dass alle Grundlagen zu C ++ - Syntax, Datentypen und OOP weiterhin zutreffen. Dasselbe sollte für die STL-Bibliotheken gelten, die in den meisten Anfängerbüchern erwähnt werden.
Obwohl ein Buch von 1998 möglicherweise einige Aktualisierungen und Entwicklungen im C ++ - Programmierstil übersehen hat, die sich im Laufe der Jahre in der Community angesammelt haben. Ich würde etwas mehr aktuelle Ressourcen suchen. Es gibt mehr als genug kostenlose Online-Tutorials und -Dokumente, die Ihnen einen guten Einstieg ermöglichen sollen. Einige von ihnen erwähnen möglicherweise sogar C ++ 0x.
C ++ 0x wird sicherlich viel daran ändern, wie Programmierer die Sprache in Zukunft sehen und verwenden. Dies würde jedoch komplexere Projekte beeinflussen, bei denen die neuen Funktionen allmählich Sinn machen. Für einen Anfänger sollte dies keine Rolle spielen und Sie können sich darauf konzentrieren, sich mit den vorhandenen Konzepten vertraut zu machen. Das ist bereits genug, um zu lernen. Die meisten Einsteigerbücher befassen sich zum Beispiel nicht sehr intensiv mit Vorlagen, sodass Sie die neuen variadischen Vorlagen nicht unbedingt kennen müssen.
Vielleicht sehen Sie sich eine Liste der Änderungen an . Zumindest einige Konzepte wie " Range based for Loops" werden höchstwahrscheinlich auch für Anfänger in neuen Tutorials erscheinen. Ein Blick lohnt sich also.
quelle
cprogramming.com
.In Bezug auf alles, was mit Technologie zu tun hat, ist es natürlich immer eine kluge Entscheidung, mit dem neuesten Material auf dem neuesten Stand zu sein. Die in C ++ 11 eingeführten Änderungen sind jedoch darauf ausgelegt, das Boot nicht ins Wanken zu bringen. Wenn Sie neu in C ++ sind (oder generell programmieren), ist dies nichts, worüber ich mir Sorgen machen müsste.
Wenn Sie ein professioneller Programmierer sind, können Sie sicher sein, dass Sie in Zukunft an dem Code einer anderen Person arbeiten. Es ist also immer von Nutzen, die Funktionsweise zu verstehen, auch wenn es sich in der Praxis um eine abgewertete Technik handelt.
quelle
auto
und asynchrone Funktionsausführung etwas anderes bewirken als "rock the boat"?