Fantastisches modernes C++
Eine Sammlung von Ressourcen zu modernem C++.
Das Ziel besteht darin, eine Liste von Ressourcen zusammenzustellen, die Menschen dabei helfen, sich über modernes C++11 und darüber hinaus zu informieren und es zu nutzen.
Mitwirken
Um Dinge zur Liste hinzuzufügen, zu entfernen oder zu ändern: Senden Sie bitte eine Pull-Anfrage an das GitHub-Repository.
Bücher
- Eine Tour durch C++ (Bjarne Stroustrup) [C++17.11.20]
- Die Programmiersprache C++ (Bjarne Stroustrup) [C++11]
- Effektives modernes C++ (Scott Meyers) [C++11/14]
- Überblick über das neue C++ (Scott Meyers) [C++11/14]
- C++-Kernrichtlinien (Bjarne Stroustrup, Herb Sutter) [C++14.11.17] – Richtlinien für die Verwendung von modernem C++.
- C++-Parallelität in Aktion (Anthony Williams) [C++14.11.17] – Referenz und Leitfaden zum Schreiben von Multithread-Code mit Standard-C++.
- C++17 – Das vollständige Handbuch (Nicolai M. Josuttis) [C++17] – Anleitung zur Verwendung der Sprach- und Bibliotheksfunktionen von C++17.
- Professional CMake (Craig Scott) – Ein praktischer Leitfaden für die Verwendung von CMake zum Erstellen Ihrer C++-Projekte.
- Modernes C++-Tutorial: C++ 14.11.17.20 On the Fly (Changkun Ou) – Das Buch behauptet, „On the Fly“ zu sein. Ziel ist es, eine umfassende Einführung in die relevanten Funktionen des modernen C++ (vor 2020) zu bieten.
Eine umfassende Anleitung zu C++-Büchern finden Sie im Stackoverflow Definitive C++ Book Guide and List.
Gemeinschaft
Finden Sie die neuesten C++-Neuigkeiten und -Updates:
- Neuigkeiten, Status und Diskussion zu Standard C++.
Hören Sie sich die neuesten C++-Podcasts an:
- CppCast (YouTube, Twitter) – Der erste Podcast von C++-Entwicklern für C++-Entwickler!
- Cpp.chat (YouTube, Twitter) – Kommentare zu C++ und Themen, die für C++-Programmierer von Interesse sind.
- C++ Weekly – Lehrvideos von Jason Turner.
Lesen Sie die neuesten C++-Standardvorschläge:
- Papiere des C++-Standardkomitees.
Besprechen Sie alles rund um C++:
- r/cpp – Das C++-Subreddit.
- C++ Slack – Der C++ Slack-Arbeitsbereich.
- CoreHard Telegram-Gruppe.
Stellen Sie Ihre C++-Fragen:
- r/cpp_questions – Ein Subreddit für C++-Fragen und -Antworten.
- Stackoverflow C++ / C++11 / C++14 / C++17 / C++20 – Stackoverflow-Fragen zu C++.
Vielleicht wurde Ihre Frage bereits in einer FAQ beantwortet?:
- C++ Super-FAQ.
- C++11-FAQ.
Besuchen Sie eine der vielen C++-Konferenzen:
- Liste der bevorstehenden und vergangenen C++-Konferenzen.
Finden Sie C++-Benutzergruppen:
- Treffen Sie die C++-Liste der Benutzergruppen.
- Liste der Benutzergruppen im C++ Super-FAQ.
- C/C++-Treffen.
- Suchen Sie im C++-Slack nach Kanälen, die mit
#ug
beginnen.
Gespräche
TODO stellt eine Liste mit guten Vorträgen zur Vereinfachung von Code mithilfe von C++-Funktionen vom 17.11.20 zusammen
Beginnen Sie mit der SG20-Schulung und empfohlenen Videos für den C++-Unterricht.
- CppCon Talks – Vorträge von der C++-Konferenz.
- CppCon 2014: Bjarne Stroustrup „Machen Sie einfache Aufgaben einfach!“
- CppCon 2014: Herb Sutter „Lock-Free Programming (oder Jonglieren mit Rasierklingen), Teil I“
- CppCon 2014: Herb Sutter „Lock-Free Programming (oder Jonglieren mit Rasierklingen), Teil II“
- CppCon 2014: Scott Meyers „Type Deduction and Why You Care“
- CppCon 2015: Bjarne Stroustrup „Gutes C++14 schreiben“
- CppCon 2015: Herb Sutter „Gutes C++14 schreiben ... standardmäßig“
- CppCon 2016: Chandler Carruth „Müll rein, Müll raus: Streit über undefiniertes Verhalten …“
- CppCon 2016: Herb Sutter „Leak-Freedom in C++ … standardmäßig.“
- CppCon 2017: Jason Turner „Praktisches C++17“
- CppCon 2018: Jonathan Boccara „105 STL-Algorithmen in weniger als einer Stunde“
- code::dive Konferenz 2014 – Scott Meyers: Cpu Caches und Why You Care (Folien)
- code::dive Konferenz 2015 – Andrei Alexandrescu – Writing Fast Code I (Folien)
- code::dive Konferenz 2015 – Andrei Alexandrescu – Writing Fast Code II (Folien)
- C++Now Talks – Vorträge von der C++Now-Konferenz.
- Going Native 2012: Variadische Vorlagen sind funadisch
- Going Native 2013: Stephan T Lavavej – „Don't Help the Compiler“
- Going Native 2013: Sean Parent – „C++ Seasoning“
Blogs
- Andrzejs C++-Blog – Richtlinien und Gedanken zu C++.
- Anthony Williams‘ Blog
- Eingebettet in die Wissenschaft – John Regehr, Professor für Informatik, University of Utah, USA.
- Eric Niebler
- Fließendes C++ – Ausdrucksstarker Code in C++.
- Guru der Woche (neue Beiträge) – Eine regelmäßige Reihe von C++-Programmierproblemen, erstellt und geschrieben von Herb Sutter.
- Guru der Woche (ältere Beiträge) – Ältere Beiträge zum Guru der Woche.
- Marshalls C++-Gedanken
- Blog von Paul Fultz II
- Preshing zum Programmieren
- Vereinfachen Sie C++ – Schreiben Sie sauberes und wartbares C++.
- Sticky Bits – Ein Blog, der sich mit der Entwicklung von Software für Echtzeit- und eingebettete Systeme beschäftigt.
- Sutter's Mill – Herb Sutter über Softwareentwicklung.
- Der Blick von Aristeia – Die beruflichen Aktivitäten und Interessen von Scott Meyers.
- Visual C++ Team-Blog
- Warum ist ein Rabe wie ein Schreibtisch?
Websites
- C++ Best Practices – Kollaborative Sammlung von C++ Best Practices.
- C++-Muster – Ein Repository moderner C++-Muster.
- C++-Referenz – C++-Referenz.
- C++ anhand von Beispielen - Lernen Sie C++ anhand von Beispielen!
Projektstarter-Vorlagen
- ModernCppStarter – Eine Vorlage zum Starten moderner C++-Projekte mit CMake, CI, Codeabdeckung, Clang-Format, reproduzierbarem Abhängigkeitsmanagement und mehr.
- modern-cpp-template – Eine Vorlage für moderne C++-Projekte mit CMake, Clang-Format, CI, Unit-Tests und mehr, mit Unterstützung für nachgelagerte Einbindung.
- cmake_template – Ein CMake-Vorlagenprojekt, das Ihnen den Einstieg in C++ und Tools erleichtert.
- Pitchfork – Pitchfork ist eine Reihe von C++-Projektkonventionen.
Bibliotheken
Dies soll keine umfassende Liste aller C- und C++-Bibliotheken sein. Es handelt sich um eine Liste hochwertiger moderner Bibliotheken mit allgemeiner Anwendbarkeit (Serialisierung, Datenbank, Tests usw.) oder hochwertiger Bibliotheken mit neuartiger Nutzung neuer C++-Funktionen.
Küchenspüle / Rahmen
- abseil – Abseil ist eine Open-Source-Sammlung von C++-Code (kompatibel mit C++11), die zur Erweiterung der C++-Standardbibliothek entwickelt wurde.
- Boost – Sammlung von C++-Bibliotheken.
- Folly – Facebook Open-Source-Bibliothek.
- POCO – Die POCO C++-Bibliotheken sind leistungsstarke plattformübergreifende C++-Bibliotheken zum Erstellen netzwerk- und internetbasierter Anwendungen, die auf Desktop-, Server-, Mobil-, IoT- und eingebetteten Systemen ausgeführt werden.
- nonstd-lite – Übergeordnetes Element von *-lite-Repositorys, ein Migrationspfad zu Post-C++11-Funktionen für Umgebungen vor C++11.
- xtd – Modernes C++17/20-Framework zum Erstellen von Konsolen- (CLI), Formularen (GUI wie WinForms) und Tunit-Anwendungen (Komponententests wie Microsoft Unit Testing Framework) unter Windows, macOS, Linux, iOS und Android.
Testen
- Genehmigungstests für C++ – Native Genehmigungstests für C++ unter Linux, Mac und Windows.
- autocheck – QuickCheck- und SmallCheck-Klone für C++.
- Bandit – Ein Nur-Header-Framework für C++11, das die Arbeit mit Unit-Tests zu einem angenehmen Erlebnis machen soll.
- Boost:UT – C++20 μ(micro)/Unit-Testing-Framework, Single-Header, ohne Notwendigkeit von Makros.
- Boost.Test – Boost-Test-Framework.
- Catch – Ein modernes, C++-natives, reines Header-Framework für Unit-Tests, TDD und BDD.
- clean-test – Ein modernes C++-20-Testframework.
- doctest – Das schnellste funktionsreiche C++11/14/17/20 Single-Header-Test-Framework für Unit-Tests und TDD.
- Fakeit – C++-Mocking leicht gemacht. Eine einfache, aber sehr ausdrucksstarke Bibliothek nur mit Headern für C++-Mocking.
- Googletest – Google Testing und Mocking Framework.
- Mull – Praktisches Mutationstest-Tool für C und C++
- rapidcheck – QuickCheck-Klon für C++.
- snitch – Leichtes C++20-Testframework.
Benchmarking
Bibliotheken und Frameworks zur Erstellung von Mikro-Benchmarks.
- Celero – C++-Benchmark-Authoring-Bibliothek/Framework.
- Google-Benchmark? - Eine Mikrobenchmark-Unterstützungsbibliothek.
- Hayai – das C++-Benchmarking-Framework.
- Nonius – Ein C++-Mikro-Benchmarking-Framework. C++ Benchmark Authoring-Bibliothek/Framework.
- nanobench – Einfache, schnelle und genaue Single-Header-Mikrobenchmarking-Funktionalität für C++11/14/17/20
Protokollierung
- fmtlog – Eine Protokollierungsbibliothek im fmtlib-Stil mit einer Latenzzeit von Nanosekunden.
- spdlog – Schnelle C++-Protokollierungsbibliothek.
- loguru – Eine leichte und flexible C++-Protokollierungsbibliothek
Einfädeln
- concurrentqueue – Eine schnelle gleichzeitige Warteschlange ohne Sperren für mehrere Produzenten und mehrere Verbraucher für C++11.
- Cpp-Taskflow – Moderne C++-Bibliothek für parallele Aufgabenprogrammierung
- Junction – Gleichzeitige Datenstrukturen in C++.
- MPMCQueue – Eine begrenzte, sperrenfreie Warteschlange für mehrere Produzenten und mehrere Konsumenten, geschrieben in C++11.
- SPSCQueue – Eine begrenzte, in C++11 geschriebene wartefreie und sperrenfreie Warteschlange für einen einzelnen Produzenten und einen einzelnen Verbraucher.
- Threading Building Blocks – Threading Building Blocks (TBB) ist eine von Intel entwickelte C++-Vorlagenbibliothek für die parallele Programmierung auf Mehrkernprozessoren. Mit TBB wird eine Berechnung in parallel ablaufende Aufgaben zerlegt. Die Bibliothek verwaltet und plant Threads zur Ausführung dieser Aufgaben.
- execq – Intelligente Warteschlange, die Aufgaben in Threadpool-ähnlicher Weise (seriell/gleichzeitig) in C++11 ausführt.
- concurrencpp – Eine allgemeine Parallelitätsbibliothek, die Aufgaben, Executoren, Timer und C++20-Coroutinen enthält, um sie alle zu steuern.
Parsen und Serialisierung
- json ? - JSON für modernes C++.
- jsoncpp – Eine C++-Bibliothek für die Interaktion mit JSON.
- toml++ – Eine reine Header-C++17-Bibliothek zum Parsen von TOML v0.5.0 und höher.
- tinytoml -Eine C++11-Bibliothek nur für Header zum Parsen von TOML.
- yaml-cpp – Ein YAML-Parser und Emitter in C++.
- cpptoml – Eine reine Header-Bibliothek zum Parsen von TOML-Konfigurationsdateien.
- Cerealien – Eine C++11-Bibliothek zur Serialisierung.
- cista – Eine C++17-Bibliothek für leistungsstarke binäre Serialisierung ohne Kopie.
- simdjson – Beschleunigen Sie das Parsen von JSON per se mithilfe allgemein verfügbarer SIMD-Anweisungen
- Boost.JSON – Eine JSON-Bibliothek mit robuster Unterstützung für benutzerdefinierte Allokatoren.
- hjson-cpp – Eine C++11-Bibliothek zum Lesen und Schreiben von Hjson- und/oder JSON-Dateien.
- json_struct – Hochleistungsfähiger JSON-Parser mit einem Header, der direkt in und von C++-Strukturen analysiert.
- daw_json_link – Schnelle, bequeme JSON-Serialisierung und -Analyse in C++
Formatierung und Vorlage von Zeichenfolgen
- {fmt} – Kleine, sichere und schnelle Formatierungsbibliothek.
- Inja – Eine Template-Engine für modernes C++.
- Moustache – Mustache-Textvorlagen in C++11.
- tinyformat.h – Minimale, typsichere Printf-Ersatzbibliothek für C++.
- pprint – Hübscher Drucker für modernes C++.
Skripterstellung
- sol2 – C++-Bibliotheksbindung an Lua.
- ChaiScript – Eine einfach zu verwendende eingebettete Skriptsprache für C++.
- pybind11 – Nahtlose Bedienbarkeit zwischen C++11 und Python.
Web / HTTP
- Beast – HTTP und WebSocket basierend auf Boost.Asio in C++11.
- cpprestsdk – Das C++ REST SDK ist ein Microsoft-Projekt für cloudbasierte Client-Server-Kommunikation in nativem Code unter Verwendung eines modernen asynchronen C++-API-Designs. Ziel dieses Projekts ist es, C++-Entwicklern dabei zu helfen, sich mit Diensten zu verbinden und mit ihnen zu interagieren.
- cpr – C++ Requests: Curl for People, eine spirituelle Portierung von Python Requests.
- Crow – Ein schnelles und einfach zu verwendendes Mikroframework zum Erstellen von Webservern (inspiriert von Python Flask).
- dmbcs-micro-server – C++20-basiertes JSON, HTML, Text und PNGs über HTTP; Einfache Möglichkeit, einen Server in Ihre Anwendung einzubetten, um eine webbasierte Benutzeroberfläche bereitzustellen.
- Drogon – Ein auf C++14/17 basierendes, leistungsstarkes HTTP-Anwendungsframework
- oat++ – Hochleistungs-Webframework (C++11, keine Abhängigkeit).
- pistache – Ein elegantes C++ REST-Framework.
- restbed – Das Restbed-Framework bringt asynchrone RESTful-Funktionalität in C++11-Anwendungen.
Datenbank
- mongo-cxx-driver – C++-Treiber für MongoDB.
- redox – Moderner, asynchroner und unglaublich schneller C++11-Client für Redis.
- sqlite_orm – leistungsstarke SQLite3-ORM-Bibliothek nur für Header für C++14.
- sqlite3pp – C++-Wrapper der SQLite3-API.
- sqlpp11 – Eine typsichere SQL-Vorlagenbibliothek für C++.
- libpqxx – Die offizielle C++-Client-API für PostgreSQL.
- TinyORM – Moderne C++ ORM-Bibliothek.
BioC++
- SeqAn – Die moderne C++-Bibliothek für Sequenzanalyse (C++17, C++20).
Sonstiges
- ASAP – Nur-Header-Bibliothek zum Analysieren, Anzeigen, Bearbeiten und Iterieren von Daten.
- BigIntegerCPP – Eine große C++11-Integer-Bibliothek mit effektiv hoher Leistung, schlichter Natur und auch sauber im Aussehen.
- CAF – Eine Open-Source-Implementierung des Akteurmodells in C++.
- Cinder – Cinder ist eine kostenlose Open-Source-Bibliothek für kreatives Codieren in professioneller Qualität in C++.
- Conduit – Hochleistungs-Streams basierend auf Coroutine TS.
- cppitertools – itertools (Python)-Implementierung für C++14
- cxxopts – Leichter Parser für C++-Befehlszeilenoptionen.
- date – Eine Datums- und Uhrzeitbibliothek basierend auf dem C++11/14/17-Header.
- docopt.cpp – docopt erstellt wunderschöne Befehlszeilenschnittstellen.
- EnTT – Ein schnelles und zuverlässiges Entity-Component-System (ECS) nur für Header für modernes C++.
- Font Chef – Eine C99- und C++14-Bibliothek zum Kochen von Schriftarten und zum Rendern von Text
- HashLibPlus – Eine C++11-Bibliothek, die eine benutzerfreundliche Schnittstelle zum Berechnen von Hashes und Prüfsummen von Strings, Dateien, Streams, Bytearrays und untypisierten Daten bietet, um nur einige zu nennen. Es unterstützt auch inkrementelles Hashing.
- IntX – Eine C++11-Portierung der IntX-Ganzzahlbibliothek mit beliebiger Genauigkeit und Geschwindigkeit, etwa O(N * log N) Multiplikations-/Divisionsalgorithmen.
- iod – Meta-Programmierdienstprogramme für C++14.
- Magic Enum – Statische Reflexion für Aufzählungen (zu String, von String, Iteration) für modernes C++, funktioniert mit jedem Aufzählungstyp ohne Makro oder Boilerplate-Code.
- Wise Enum – Statische Reflexion für Enums ähnlich wie Magic Enum, funktioniert aber mit C++ 14.11.17.
- Nameof – Eine reine Header-C++17-Bibliothek stellt Nameof-Makros und -Funktionen bereit, um den einfachen Namen von Variable, Typ, Funktion, Makro und Enumeration zu erhalten.
- PEGTL – Parsing Expression Grammar Template Library (C++11, nur Header).
- random – Ein einfacher, praktischer Random-Code nur für Header für modernes C++.
- rang – Eine einfache, moderne C++11-Bibliothek nur für Header für Farben in Ihrem Terminal.
- range-v3 – Experimentelle Range-Bibliothek für C++14.11.17.
- SimpleBaseLib4CPP – Eine einfache C++11-Base-Encoding-Bibliothek, die derzeit Unterstützung für die Codierung und Decodierung verschiedener Basen wie Base16, Base32 (verschiedene Varianten), Base58 (verschiedene Varianten), Base64 (verschiedene Varianten) bietet. [MIT]
- simple_match – Einfacher Mustervergleich nur im Header für C++14.
- SRL-CPP – Eine in C++11 geschriebene Builder-Bibliothek für einfache Regex-Sprachen, die eine benutzerfreundliche Schnittstelle zum Erstellen einfacher und komplexer Regex-Ausdrücke bietet. [MIT]
- tweeny – Eine reine Header-Interpolationsbibliothek mit über 30 Beschleunigungsfunktionen.
- Vireo – Eine leichte und vielseitige Videoverarbeitungsbibliothek von Twitter.
- Indikatoren – Aktivitätsindikatoren für modernes C++.
- AssociatedEnum – Nur-Header-Bibliothek für C++ für Aufzählungen mit zugehörigen Werten.
- openFrameworks – ein Open-Source-C++-Toolkit für kreatives Codieren.
- tabulate – Tabellenersteller für modernes C++.
Werkzeuge
Sonstiges
- Clang-Format ? – Ein Tool zum Formatieren von C++-Code.
- clangd – versteht Ihren C++-Code und fügt Ihrem Editor intelligente Funktionen hinzu: Code-Vervollständigung, Kompilierungsfehler, Go-to-Definition und mehr.
- Compiler-Explorer – Erkunden Sie interaktiv die Assembly-Ausgabe Ihres C++-Codes.
- cquery – C/C++-Sprachserver, der eine Codebasis mit mehreren Millionen Zeilen unterstützt, unterstützt von libclang. Emacs, Vim, VSCode und andere mit Unterstützung für das Sprachserverprotokoll. Querverweise, Vervollständigung, Diagnose, semantische Hervorhebung und mehr (Keine weiteren Commits seit dem 27. November 2018)
- ccls – C/C++/ObjC-Sprachserver, der Querverweise, Hierarchien, Vervollständigung und semantische Hervorhebung unterstützt, abgeleitet von cquery, das sich in der aktiven Entwicklung befindet
- irony-mode – AC/C++-Nebenmodus für Emacs, unterstützt von libclang.
- modern-cpp-font-lock-mode – Syntaxhervorhebungsunterstützung für modernes C++ mit Emacs
Dynamische Analyse
- Desinfektionsmittel? – Dieses Projekt ist die Heimat für Sanitizer: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer und mehr.
- Valgrind – ist ein Instrumentierungsframework zum Erstellen dynamischer Analysetools. Es gibt Valgrind-Tools, die viele Speicherverwaltungs- und Threading-Fehler automatisch erkennen und Ihre Programme detailliert profilieren können. Sie können Valgrind auch zum Erstellen neuer Tools verwenden.
Statische Analyse
- cppcheck – ist ein statisches Analysetool für C/C++-Code. Es bietet eine einzigartige Codeanalyse zur Erkennung von Fehlern und konzentriert sich auf die Erkennung von undefiniertem Verhalten und gefährlichen Codierungskonstrukten.
- klirrend-ordentlich? - ist ein Clang-basiertes C++-„Linter“-Tool. Sein Zweck besteht darin, ein erweiterbares Framework für die Diagnose und Behebung typischer Programmierfehler wie Stilverletzungen, Schnittstellenmissbrauch oder Fehler bereitzustellen, die durch statische Analyse abgeleitet werden können. clang-tidy ist modular aufgebaut und bietet eine praktische Schnittstelle zum Ausstellen neuer Schecks.
- clang-analyzer – ist ein Quellcode-Analysetool, das Fehler in C-, C++- und Objective-C-Programmen findet. Es implementiert eine pfadsensitive, interprozedurale Analyse basierend auf einer symbolischen Ausführungstechnik.
Fuzzing
- American Fuzzy Lop – American Fuzzy Lop ist ein sicherheitsorientierter Fuzzer.
- hongfuzz – Ein sicherheitsorientierter, rückkopplungsgesteuerter, evolutionärer, einfach zu bedienender Fuzzer mit interessanten Analysemöglichkeiten.
- libFuzzer – Eine Bibliothek für abdeckungsgesteuerte Fuzz-Tests.
System aufbauen
- Bazel – ist ein schnelles, skalierbares, mehrsprachiges und erweiterbares Build-System.
- build2 – ist eine plattformübergreifende Build-Toolchain zum Entwickeln und Packen von C- und C++-Code.
- CMake? – Plattformübergreifende Toolfamilie zum Erstellen, Testen und Verpacken von Software.
- Meson – ist ein Open-Source-Build-System, das sowohl extrem schnell als auch, was noch wichtiger ist, so benutzerfreundlich wie möglich sein soll.
- XMake – ist ein plattformübergreifendes Build-Dienstprogramm, das auf Lua basiert.
Paketverwaltung
- Buckaroo – Vollständig dezentraler polyglotter Paketmanager für C++ und Freunde
- cget – CMake-Paketabruf.
- conan – C/C++-Paketmanager.
- CPM – Ein CMake-Skript für die einrichtungsfreie plattformübergreifende Abhängigkeitsverwaltung.
- Hunter – Plattformübergreifender Paketmanager für C++.
- vcpkg – C++-Bibliotheksmanager für Windows, Linux und MacOS
- xrepo – Ein plattformübergreifender C/C++-Paketmanager basierend auf Xmake.
Um
Diese Liste wurde von Erik Rigtorp mit Hilfe der C++-Community zusammengestellt:
- rigtorp.se
- [email protected]
- github.com/rigtorp
- twitter.com/rigtorp
- LinkedIn.com/in/rigtorp