Ist effektives C ++ noch effektiv?


139

Nach dem, was ich in diesem Beitrag gesehen habe, habe ich beschlossen, das Buch Effective C ++ zu lesen .

Aber jetzt, da es aufgrund von C ++ 11 viele neue Funktionen gibt und einige der bewährten Methoden geändert wurden, bin ich mir nicht sicher, ob dies tatsächlich eine gute Idee ist oder nicht. Hat das Aufkommen von C ++ 11 einen der in Effective C ++ enthaltenen Ratschläge verworfen? Wenn ja, welche Themen sollte ich vermeiden?


4
Der Autor hat einige Kommentare in einem Artikel scottmeyers.blogspot.co.uk/2013/01/… und anderen auf der Website abgegeben, im Grunde ja, aber es gibt noch mehr zu beachten.
Jcoder

2
Schauen Sie sich einfach das Inhaltsverzeichnis an: pearson.ch/1471/9780321334879/… . Viele Elemente sind noch gültig, einige können mit R-Wert-Referenzen und anderen neuen Dingen verbessert werden, aber insgesamt sollte es immer noch wirksam sein.
Zeta

Diese Frage passt schlecht zu SO. (1) Der angefragte Inhalt ist nicht in Frage gestellt, sondern befindet sich in einer externen Ressource (und ist nicht einmal verlinkt). (2) Entweder ist die Beantwortung jeder Empfehlung im Buch eine separate Antwort. In diesem Fall handelt es sich um eine Listenfrage, für die zu viele Antworten erforderlich sind, oder es sollte eine einzige Antwort das gesamte Buch behandeln. In diesem Fall ist diese Frage zu weit gefasst. Trotzdem wäre es großartig, die gleiche Frage zu einer einzelnen Empfehlung zu stellen.
Ben Voigt

2
(1) Ich beziehe mich auf ein Buch, das in einer der beliebtesten Fragen in SO erwähnt wird. (2) Das ist eine gute Beschwerde, aber Sie können mit fast jeder Frage breit sein. oder Sie können so eng sein, wie Sie möchten. Ich denke, dass die Antworten ziemlich gut und viel enger waren als die meisten Fragen in SO, daher denke ich nicht, dass eine detaillierte Liste notwendig ist. OFF THEMA: Ratet mal, wer eine Frage hat, die mit "Kann jemand die Leistung meiner Ganzzahl mit dem unten verlinkten std :: string-Code übertreffen?"
Deutscher Capuano

Antworten:


93

Dies hatte Scott Meyers selbst in seinem eigenen Blog zu sagen

Dies kann dazu führen, dass Sie sich fragen, ob die Informationen und Ratschläge in dieser Pre-C ++ 0x-Edition von Effective C ++ weiterhin relevant sind. Ich freue mich, Ihnen mitteilen zu können, dass dies der Fall ist. Überraschenderweise sogar. Nachdem ich mich fast zwei Jahre lang mit den Details von C ++ 0x beschäftigt hatte, erwartete ich ein wenig Stöhnen, als ich das Inhaltsverzeichnis dieses Buches unter Berücksichtigung von C ++ 0x überprüfte. Sicherlich wären einige Artikel unangemessen. Aber der Rat, den ich fand, erwies sich als richtig. Sollten C ++ 0x-Entwickler Konstanten, Aufzählungen und Inlines bevorzugen #defines(Punkt 2)? Sie sollten. Sollten sie verhindern, dass Ausnahmen Destruktoren verlassen (Punkt 8)? Bestimmt. Sollten sie Objekte verwenden, um Ressourcen zu verwalten? Datenmitglieder als privat deklarieren? Alternativen zu virtuellen Funktionen in Betracht ziehen? Faktorparameterunabhängiger Code aus Vorlagen? (Punkte 13, 22, 35 und 44.) Ja, ja, ja, ja! Mein Ziel war es immer, dass das Inhaltsverzeichnis von Effective C ++ die Ratschläge im Buch zusammenfasst, und diese Zusammenfassung gilt für die C ++ 0x-Entwicklung ebenso wie für die „traditionelle“ C ++ - Entwicklung. C ++ 0x ist eine größere Sprache und in mancher Hinsicht eine andere, aber die Kerntechniken für die effektive Nutzung von „altem“ C ++ sind auch für die effektive Nutzung von C ++ 0x von zentraler Bedeutung.

Dies bedeutet nicht, dass dieses effektive C ++ perfekt zu C ++ 0x passt. In diesem Buch werden keine neuen Funktionen von C ++ 0x behandelt. Daher fehlen Elemente zur effektiven Nutzung dieser Funktionen. Ein C ++ 0xified Effective C ++ würde sicherlich Elemente enthalten, die dem Verschieben von Operationen, der einheitlichen Initialisierung und Lambda-Ausdrücken gewidmet sind, und es würde wahrscheinlich ein ganzes Kapitel über die effektive Verwendung der Parallelitäts-API enthalten. Ein solches Buch würde auch verschiedene Beispiele enthalten, z. B. solche, die automatische Variablen verwenden, bereichsbasiert für Schleifen, Standardinitialisierer in der Klasse sowie gelegentlich variadische Vorlagen. In dem Maße, in dem dieses Buch C ++ 0x nicht unterstützt, handelt es sich bei den Fehlern um Auslassungen und nicht um Provisionen.

UPDATE : Der neue Titel Effective Modern C ++ wird seit November 2014 von O'Reilly und Amazon (und vielen anderen, für die Sie googeln können) zum Verkauf angeboten .


45

Ja, definitiv noch lesenswert. Es gibt ein neues Buch, an dem Scott arbeitet: Effective C ++ 11 , das sich nur auf C ++ 11-Code konzentriert. Das effektive C ++ ist immer noch sehr relevant und wird durch das neue Buch nicht ersetzt. Kaufen, lesen, genießen :)


1
Ich sehe, dass die Bücher aufeinander aufbauen, daher ist Effective C ++ die entscheidende Grundlage. Wenn Sie nur eines der beiden lesen, sollte es Effective C ++ sein. Effektives modernes C ++ ist weitaus esoterischer (und um ehrlich zu sein, ist die Mehrheit von C ++ sowieso alles andere als "modern").
Andy Krouwel

21

Erstens ist das Buch natürlich immer noch für C ++ 03 gültig.

Zweitens schreibt Meyers oder hat geschrieben, je nachdem, wann Sie diesen Satz lesen, Effective C ++ 11.

Drei, allgemein gesprochen, werden die Punkte dieses Buches weiterhin gültig sein. C ++ bevorzugt immer noch Geschwindigkeit gegenüber Sicherheit, und viele Probleme in Effective C ++ drehen sich darum.

Der einzige Punkt, von dem ich erwarten würde, dass er ungültig ist, sind diejenigen, die sagen: "Tu das nicht, mach das stattdessen." "Mach das nicht" ist weiterhin gültig. Aber C ++ wird einige Probleme gelöst haben. Insbesondere werden Empfehlungen zur Verwendung von Boost wahrscheinlich abgelehnt, da C ++ 11 viele der Funktionen enthält, für die Meyers den Leser speziell auf Boost verweist.


1
Und natürlich tr1, da ich glaube, dass jedes Element, das tr1er erwähnte, es in den C ++ 11-Standard geschafft hat.
Kyle Strand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.