Ich bin ein C++-Entwickler der alten Schule und habe bis heute keine professionelle C++11 - Erfahrung. Ich vertraue dem C++-Komitee, dass sich die Sprache in die richtige Richtung bewegt, aber es scheint, dass in den Projekten, an denen ich arbeite, die Skepsis vorherrscht und viele der C++11-Features verboten werden, noch bevor sie verstanden und erforscht werden.
Wie auch immer, ich habe jetzt die Gelegenheit, an einer neuen Codebasis zu arbeiten, und ich würde gerne die ganze C++11-Power anwenden, aber ich möchte mir nicht selbst ins Knie schießen.
In der Vergangenheit fand ich einige der statischen Codeanalyse-Tools als äußerst leistungsfähiges Lehrinstrument, um mir all diese subtilen Aspekte der Sprache zu zeigen.
Für mein Projekt verwende ich Clang und portable Bibliotheken wie STL und Boost , die auf Windows, Linux, Mac und mehr aufbauen.
Ich hatte gehofft , dass clang-tidy , clang-modernize usw. gute Tools sind, mit denen ich mein Verhalten an die C++11-Funktion anpassen kann, aber sie scheinen nur sehr begrenzte Hilfe zu bieten - ich habe buchstäblich 2-3 Tage gebraucht, um mich anzupassen zu all den Vorschlägen, die sie machen ... und ich bin sicher, dass es viele Möglichkeiten gibt, die mir zum Beispiel auf der Grundlage von Rvalue- Referenzen fehlen.
Einige Features, die ich mir wünschen würde:
Wenn das Entfernen von Kopien nicht ausreicht und die Weiterleitungsschnittstelle eine Optimierung bietet.
Wenn einige der Klassenmitglieder nicht verschiebbar sind und ein automatisch generierter Bewegungskonstruktor und Bewegungszuweisungsoperator nicht möglich sind.
Wenn die lokale Variable verschoben werden könnte, wenn dies die letzte Referenz in ihrem Geltungsbereich ist.
Wann const auto&
ist besser vorbei auto
.
Ich habe keine Preisgrenzen.
In der Vergangenheit habe ich für C/C++-Code der alten Schule PC-lint verwendet , eine kommerzielle Software, die von Gimpel Software entwickelt wurde.
Das Unternehmen entwickelt tatsächlich ein paar Tools zur statischen Analyse: PC-lint und FlexeLint .
Pc-lint ist für Windows-Systeme, während FlexeLint auf fast allen Systemen läuft, die C unterstützen, einschließlich VMS, OS-9 und so ziemlich allen Unix-Systemen.
PC-lint und FlexeLint sind leistungsstarke statische Analysetools, die Ihren C/C++-Quellcode überprüfen und Fehler, Störungen, Inkonsistenzen, nicht portierbare Konstrukte, redundanten Code und vieles mehr finden. Es sieht über mehrere Module hinweg und genießt so eine Perspektive, die Ihr Compiler nicht hat.
Bezüglich der C++11-Unterstützung haben sie eine eigene Seite dafür:
PC-lint / FlexeLint Support for C++ 11
Die vollständige Unterstützung für C++11 und C++1y ist unser Hauptaugenmerk, und obwohl wir kein Datum für die vollständige Unterstützung nennen können, rechnen wir mit einem schnelleren Veröffentlichungszyklus, wenn wir die Unterstützung für die verbleibenden Funktionen einführen.
Zum jetzigen Zeitpunkt unterstützen sie also nicht alle C++11-Funktionen, aber die meisten scheinen vorhanden zu sein. Was mir gefällt, ist, dass der Entwicklungsstatus der Funktionen auf dieser Seite klar und transparent zusammen mit einer Priorität gemeldet wird (bei anderen Tools scheinen solche Informationen nicht so klar oder leicht verfügbar zu sein).
In Ihrer Frage haben Sie beispielsweise rvalue erwähnt , das anscheinend unterstützt wird:
Basierend auf den Informationen, die Sie auf der Website und auf dieser Seite finden, den damit verbundenen Kosten und Ihrem Projekt, können Sie beurteilen, ob es sich um ein Tool handelt, das Ihren Anforderungen entspricht. Andere kennen vielleicht andere Tools, ich schlage vor, dass Sie sich dieses ansehen.
Schließlich findet sich auf Wikipedia eine Liste weiterer Tools für die statische C/C++-Codeanalyse . Sie unterstützen nicht alle C++11.
Sie können CppDepend ausprobieren , ein ziemlich vollständiges statisches Analysetool, das eine Vielzahl von Funktionen integriert und zu 100 % in Visual Studio integriert ist.
Izzy
gsf
Izzy
gsf
mguassa
gsf
Mawg sagt, Monica wieder einzusetzen
gsf
mguassa