Ich bin auf diesen Artikel gestoßen, der einen Codierungsstil in C ++ vorschlägt, der auf den ersten Blick etwas seltsam aussieht. Aber nachdem ich es durchgelesen und ein bisschen nachgedacht habe, denke ich wirklich darüber nach, es auszuprobieren.
Der attraktivste Vorteil ist die einfache Umgestaltung der Methoden. Während ich eine neue Klasse schreibe, ändere ich ständig Methodennamen, Parameter usw. In C ++ ist es ziemlich ärgerlich, einen Methodennamen in zwei Dateien (.h, .cpp) ändern zu müssen.
Ich habe versucht, etwas mit diesem Stil nicht zu finden, aber abgesehen von der Tatsache, dass der Code für erfahrene C ++ - Programmierer wirklich seltsam aussieht und sich auch so anfühlt, kann ich keinen größeren Fehler feststellen. Aber da ich ein ziemlich unerfahrener C ++ - Programmierer bin, hoffe ich, dass mich hier jemand auf mögliche Gefahren aufmerksam macht.
Meine Frage lautet also:
Gibt es ernsthafte Nachteile bei der Verwendung dieses Codierungsstils?
quelle
struct B
im Beispiel eine Vorlage geändert und sie wurde einwandfrei kompiliert.Antworten:
Ja, Sie werden andere C ++ - Programmierer verwirren, wenn Sie Ihren gesamten Code so schreiben. Ich habe noch nie C ++ - Code ohne Vorlage gesehen, der so geschrieben wurde, mit allem in der Header-Datei. Dies wurde auch in einer Frage zum Stapelüberlauf ausführlich erörtert .
Bei den tatsächlichen technischen Problemen fallen mir einige Dinge ein.
inline
. Ihre Kompilierungszeiten werden sich wahrscheinlich erhöhen.Vielleicht möchten Sie auch die Programmiersprache D ausprobieren , die meiner Meinung nach viele dieser Probleme löst. Der D-Compiler wurde unter Berücksichtigung dieses Stils entwickelt und unterstützt keine 30-jährige C-Abwärtskompatibilität.
quelle
Es ist nicht gerade eine neue Idee. Anfängliche Programmierer vermeiden Erklärungen wie die Pest und kommen meistens damit durch, weil ihre Programme so klein sind. Die Folge ist, dass Sie sich jetzt um die Reihenfolge kümmern müssen, in der Sie Ihre Funktionen definieren. Die Konsequenz der Sorge um die Definitionsreihenfolge ist die Versuchung, das Problem zu minimieren, indem Sie Ihre Funktionen zu groß machen.
Sie verlieren auch die schöne Trennung von Schnittstelle und Implementierung. Der Autor selbst beklagt, dass die privaten Mitglieder Teil der Header-Datei sind, und "löst" dann das Problem, indem er alle Implementierungsdetails zu einem Teil der Header-Datei macht.
quelle
Wenn Sie Klassen im Java -Stil möchten, programmieren Sie in Java !
Er macht in seinem Artikel viele Vermutungen, die völlig falsch sind. In keiner bestimmten Reihenfolge:
Dies ist einfach falsch und zeigt, dass er noch nie an einem großen C ++ - Programm gearbeitet hat. Laden Sie ein großes Open Source C ++ - Programm herunter , kompilieren Sie das Programm und sagen Sie mir, ob Sie jedes Mal, wenn Sie ein Semikolon vergessen, so lange warten möchten.
Ok, zunächst einmal ist es keine Funktion, von der "nur sehr wenige Programmierer zu wissen scheinen". Zweitens ist dies ein völliges Missverständnis der Vorwärtserklärung und wofür sie verwendet wird. Der Coding Style Guide von Google enthält eine halbwegs anständige Einführung: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Forward_Declarations
Sie sollen den Compiler vereinfachen und die Kompilierungszeit erheblich verkürzen.
quelle
Das scheint mir nur ein doofer Name zu sein, um Vorwärtserklärungen zu machen , anstatt
#include <blah>
.Der Vorteil der Forward-Deklarationen besteht darin, dass Ihre Kompilierungszeiten erheblich kürzer sein können. Der Hauptnachteil von IMO ist jedoch, dass Sie sich darüber im Klaren sein müssen, wann Sie mit einer Forward-Deklaration davonkommen können und wann nicht scheinbar unverständliche Fehlermeldungen für einen trivialen Fehler.
quelle