Convert Figma logo to code with AI

rigtorp logoawesome-modern-cpp

A collection of resources on modern C++

11,761
1,137
11,761
6

Top Related Projects

6,118

Guidelines Support Library

The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++

A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.

Collection of various algorithms in mathematics, machine learning, computer science and physics implemented in C++ for educational purposes.

📚 Modern C++ Tutorial: C++11/14/17/20 On the Fly | https://changkun.de/modern-cpp/

Quick Overview

Awesome Modern C++ is a curated list of resources for modern C++ development. It provides links to various tools, libraries, frameworks, and learning materials that focus on C++11 and later standards. This repository serves as a comprehensive guide for developers looking to stay up-to-date with the latest C++ practices and technologies.

Pros

  • Extensive collection of high-quality resources for modern C++ development
  • Regularly updated with new content and community contributions
  • Well-organized into categories for easy navigation
  • Includes both beginner-friendly and advanced resources

Cons

  • May be overwhelming for newcomers due to the large amount of information
  • Some linked resources might become outdated over time
  • Lacks detailed descriptions or reviews of individual resources
  • Primarily focuses on external links rather than providing in-depth content within the repository

Code Examples

As this is not a code library but a curated list of resources, there are no specific code examples to provide.

Getting Started

As this is not a code library, there are no specific getting started instructions. However, users can begin exploring the resources by visiting the GitHub repository at https://github.com/rigtorp/awesome-modern-cpp and browsing through the categorized lists of links.

Competitor Comparisons

6,118

Guidelines Support Library

Pros of GSL

  • Provides actual implementation of guidelines and utilities
  • Backed by Microsoft, potentially more stable and well-maintained
  • Offers concrete tools for safer C++ programming

Cons of GSL

  • Focused solely on Guidelines Support Library, less comprehensive
  • May require additional setup and integration into projects
  • Limited to specific C++ safety and usage patterns

Code Comparison

GSL example:

#include <gsl/gsl>

void example(gsl::span<int> arr) {
    for (int& i : arr) {
        i *= 2;
    }
}

Awesome Modern C++ doesn't provide code, but might reference:

#include <vector>
#include <algorithm>

void example(std::vector<int>& arr) {
    std::for_each(arr.begin(), arr.end(), [](int& i) { i *= 2; });
}

Summary

GSL offers concrete implementations for C++ best practices, while Awesome Modern C++ serves as a curated list of resources. GSL is more focused but provides actual code, whereas Awesome Modern C++ covers a broader range of modern C++ topics without implementation. The choice between them depends on whether you need specific tools (GSL) or a comprehensive guide to modern C++ resources (Awesome Modern C++).

The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++

Pros of CppCoreGuidelines

  • Comprehensive set of guidelines for writing modern C++ code
  • Officially supported by the C++ Standards Committee
  • Regularly updated with new C++ standards and best practices

Cons of CppCoreGuidelines

  • Can be overwhelming for beginners due to its extensive content
  • Focuses primarily on guidelines rather than providing a curated list of resources
  • May require more time to navigate and find specific information

Code Comparison

CppCoreGuidelines example:

void f(int* p, int n)   // BAD: pointer argument
{
    // ...
}

void f(span<int> a)     // GOOD: span argument
{
    // ...
}

Awesome Modern C++ example:

// No direct code examples provided, as it's a curated list of resources
// However, it links to various code examples and libraries

Awesome Modern C++ is a curated list of resources for modern C++ development, including libraries, tools, and articles. It provides quick access to a wide range of C++ resources but doesn't offer direct guidelines or code examples.

CppCoreGuidelines, on the other hand, is a comprehensive set of guidelines for writing C++ code. It offers detailed explanations and code examples but may require more time to navigate and find specific information compared to the concise list format of Awesome Modern C++.

A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.

Pros of awesome-cpp

  • More comprehensive, covering a wider range of C++ topics and libraries
  • Regularly updated with new resources and contributions
  • Includes sections for job boards, podcasts, and talks

Cons of awesome-cpp

  • Less focused on modern C++ features and best practices
  • May include outdated or less relevant resources due to its broader scope
  • Navigation can be more challenging due to the large number of categories

Code comparison

While both repositories primarily focus on curating lists of resources rather than providing code examples, awesome-modern-cpp occasionally includes short code snippets to illustrate modern C++ features. For example:

awesome-modern-cpp:

std::vector<int> v = {1, 2, 3, 4, 5};
auto sum = std::accumulate(v.begin(), v.end(), 0);

awesome-cpp doesn't typically include code snippets, focusing instead on categorizing and listing resources.

Summary

awesome-cpp offers a more extensive collection of C++ resources, covering a broader range of topics and including additional categories like job boards and podcasts. However, awesome-modern-cpp provides a more focused approach to modern C++ features and best practices, occasionally including code snippets to illustrate concepts. The choice between the two repositories depends on whether you're looking for a comprehensive list of C++ resources or a more targeted collection of modern C++ information.

Collection of various algorithms in mathematics, machine learning, computer science and physics implemented in C++ for educational purposes.

Pros of C-Plus-Plus

  • Provides actual implementations of algorithms and data structures
  • Offers a hands-on learning experience for C++ programming
  • Includes a wide variety of algorithms across different domains

Cons of C-Plus-Plus

  • May not always follow modern C++ best practices
  • Lacks curated resources for learning modern C++ concepts
  • Focuses more on algorithmic implementations rather than language features

Code Comparison

awesome-modern-cpp typically doesn't include code snippets, as it's a curated list of resources. C-Plus-Plus, on the other hand, provides full implementations. Here's an example of a simple algorithm from C-Plus-Plus:

// Binary Search implementation
int binary_search(int arr[], int l, int r, int x) {
    if (r >= l) {
        int mid = l + (r - l) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binary_search(arr, l, mid - 1, x);
        return binary_search(arr, mid + 1, r, x);
    }
    return -1;
}

This code demonstrates the practical nature of C-Plus-Plus, providing ready-to-use implementations for learners and developers.

📚 Modern C++ Tutorial: C++11/14/17/20 On the Fly | https://changkun.de/modern-cpp/

Pros of modern-cpp-tutorial

  • Provides a structured, tutorial-style approach to learning modern C++
  • Offers in-depth explanations and examples for each concept
  • Available in multiple languages (English, Chinese)

Cons of modern-cpp-tutorial

  • Less comprehensive coverage of C++ resources compared to awesome-modern-cpp
  • May not be as frequently updated as awesome-modern-cpp
  • Focuses primarily on C++11/14/17, with less emphasis on newer standards

Code comparison

modern-cpp-tutorial:

auto add = [](int x, int y) { return x + y; };
std::cout << add(1, 2) << std::endl;

awesome-modern-cpp (example from a linked resource):

std::vector<int> v = {1, 2, 3, 4, 5};
auto sum = std::accumulate(v.begin(), v.end(), 0);

Summary

modern-cpp-tutorial is a structured learning resource for modern C++, offering detailed explanations and examples. It's ideal for those seeking a guided approach to learning C++11 and beyond. However, it may not cover as wide a range of topics or be as frequently updated as awesome-modern-cpp.

awesome-modern-cpp serves as a curated list of resources, providing links to various C++ libraries, tools, and learning materials. It offers a broader overview of the modern C++ ecosystem but doesn't provide in-depth tutorials itself.

Choose modern-cpp-tutorial for a comprehensive learning experience, or awesome-modern-cpp for a wide-ranging collection of C++ resources.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README



Awesome Modern C++

A collection of resources on modern C++.

The goal is to collect a list of resources to help people learn about and leverage modern C++11 and beyond.

Contributing

To add, remove or change things on the list: please submit a pull request to the GitHub repository.

Books

For a comprehensive guide to C++ books see the Stackoverflow Definitive C++ Book Guide and List.

Community

Find the latest C++ news and updates:

Listen to the latest C++ podcasts:

Read the latest C++ standard proposals:

Discuss everything related to C++:

Ask your C++ questions:

Maybe your question was already answered in a FAQ?:

Go to one of the many C++ conferences:

Find C++ user groups:

Talks

TODO curate list of good talks on how to simplify code using C++11/17/20 features

Start with SG20 Education and Recommended Videos for Teaching C++.

Blogs

Websites

Project Starter Templates

  • ModernCppStarter - A template for kick-starting modern C++ projects using CMake, CI, code coverage, clang-format, reproducible dependency management and more.
  • modern-cpp-template - A template for modern C++ projects using CMake, Clang-Format, CI, unit testing and more, with support for downstream inclusion.
  • cmake_template - A template CMake project to get you started with C++ and tooling.
  • Pitchfork - Pitchfork is a Set of C++ Project Conventions.

Libraries

This is not supposed to be a comprehensive list of all C and C++ libraries. It is a list of high-quality modern libraries with general applicability (serialization, database, testing, etc) or high-quality libraries with novel use of new C++ features.

Kitchensink / Framework

  • abseil - Abseil is an open-source collection of C++ code (compliant to C++11) designed to augment the C++ standard library.
  • Boost - Collection of C++ libraries.
  • Folly - Facebook Open-source Library.
  • POCO - The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
  • nonstd-lite - Parent of *-lite repositories, a migration path to post-C++11 features for pre-C++11 environments.
  • xtd - Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applications on Windows, macOS, Linux, iOS and android.

Testing

  • Approval Tests for C++ - Native ApprovalTests for C++ on Linux, Mac and Windows.
  • autocheck - QuickCheck and SmallCheck clones for C++.
  • Bandit - A header-only framework for C++11 that wants to make working with unit tests a pleasant experience.
  • Boost:UT - C++20 μ(micro)/Unit Testing framework, single-header, without need for macros.
  • Boost.Test - Boost testing framework.
  • Catch 🔥 - A modern, C++-native, header-only, framework for unit-tests, TDD and BDD.
  • clean-test - A modern C++-20 testing framework.
  • doctest 🚀 - The fastest feature-rich C++11/14/17/20 single-header testing framework for unit tests and TDD.
  • Fakeit - C++ mocking made easy. A simple yet very expressive, headers only library for c++ mocking.
  • Googletest - Google Testing and Mocking Framework.
  • Mull - Practical mutation testing tool for C and C++
  • rapidcheck - QuickCheck clone for C++.
  • snitch - Lightweight C++20 testing framework.

Benchmarking

Libraries and frameworks for creating micro-benchmarks.

  • Celero - C++ Benchmark Authoring Library/Framework.
  • Google Benchmark 🌟 - A microbenchmark support library.
  • hayai - the C++ benchmarking framework.
  • Nonius - A C++ micro-benchmarking framework. C++ Benchmark Authoring Library/Framework.
  • nanobench - Simple, fast, accurate single-header microbenchmarking functionality for C++11/14/17/20

Logging

  • fmtlog - A fmtlib-style logging library with latency in nanoseconds.
  • spdlog - Fast C++ logging library.
  • loguru - A lightweight and flexible C++ logging library

Threading

  • concurrentqueue - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11.
  • Cpp-Taskflow - Modern C++ Parallel Task Programming Library
  • Junction - Concurrent data structures in C++.
  • MPMCQueue - A bounded multi-producer multi-consumer lock-free queue written in C++11.
  • SPSCQueue - A bounded single-producer single-consumer wait-free and lock-free queue written in C++11.
  • Threading Building Blocks - Threading Building Blocks (TBB) is a C++ template library developed by Intel for parallel programming on multi-core processors. Using TBB, a computation is broken down into tasks that can run in parallel. The library manages and schedules threads to execute these tasks.
  • execq - Smart queue that executes tasks in threadpool-like manner (serial / concurrent) in C++11.
  • concurrencpp - A general concurrency library containing tasks, executors, timers and C++20 coroutines to rule them all.

Parsing & Serialization

  • json 🥇 - JSON for Modern C++.
  • jsoncpp - A C++ library for interacting with JSON.
  • toml++ - A header-only C++17 library for parsing TOML v0.5.0 and later.
  • tinytoml -A header only C++11 library for parsing TOML.
  • yaml-cpp - A YAML parser and emitter in C++.
  • cpptoml - A header-only library for parsing TOML configuration files.
  • cereal - A C++11 library for serialization.
  • cista - A C++17 library for high-performance zero-copy binary serialization.
  • simdjson - Accelerate the parsing of JSON per se using commonly available SIMD instructions
  • Boost.JSON - A JSON library with robust support for custom allocators.
  • hjson-cpp - A C++11 library for reading and writing Hjson and/or JSON files.
  • json_struct - High performance, single header JSON parser, parsing directly to and from C++ structs.
  • daw_json_link - Fast, convenient JSON serialization and parsing in C++

String formatting & templating

  • {fmt} - Small, safe and fast formatting library.
  • Inja - A Template Engine for Modern C++.
  • Mustache - Mustache text templates in C++11.
  • tinyformat.h - Minimal, type safe printf replacement library for C++.
  • pprint - Pretty Printer for Modern C++.

Scripting

  • sol2 - C++ library binding to Lua.
  • ChaiScript - An easy to use embedded scripting language for C++.
  • pybind11 - Seamless operability between C++11 and Python.

Web / HTTP

  • Beast - HTTP and WebSocket built on Boost.Asio in C++11.
  • cpprestsdk - The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
  • cpr - C++ Requests: Curl for People, a spiritual port of Python Requests.
  • Crow - A Fast and Easy to use microframework for creating webservers (inspired by Python Flask).
  • dmbcs-micro-server - C++20-based JSON, HTML, text and PNGs over HTTP; simple way to embed a server into your application to provide a web-based UI.
  • Drogon - A C++14/17 based, high-performance HTTP application framework
  • oat++ - High-performance Web framework (C++11, zero-dependency).
  • pistache - An elegant C++ REST framework.
  • restbed - Restbed framework brings asynchronous RESTful functionality to C++11 applications.

Database

  • mongo-cxx-driver - C++ Driver for MongoDB.
  • redox - Modern, asynchronous, and wicked fast C++11 client for Redis.
  • sqlite_orm - powerful header only SQLite3 ORM library for C++14.
  • sqlite3pp - C++ wrapper of SQLite3 API.
  • sqlpp11 - A type safe SQL template library for C++.
  • libpqxx - The official C++ client API for PostgreSQL.
  • TinyORM - Modern C++ ORM library.

BioC++

  • SeqAn - The modern C++ library for sequence analysis (C++17, C++20).

Misc

  • ASAP - header-only library to parse, display, operate and iterate on dates.
  • BigIntegerCPP - A C++11 large integer library with effective high performance, simplistic in nature and also clean in the eyes.
  • CAF - An Open Source Implementation of the Actor Model in C++.
  • Cinder - Cinder is a free and open source library for professional-quality creative coding in C++.
  • Conduit - High Performance Streams Based on Coroutine TS.
  • cppitertools - itertools (python) implementation for C++14
  • cxxopts - Lightweight C++ command line option parser.
  • date - A date and time library based on the C++11/14/17 header.
  • docopt.cpp - docopt creates beautiful command-line interfaces.
  • EnTT - A header-only, fast and, reliable entity-component system (ECS) for modern C++.
  • Font Chef - A C99 and C++14 library to cook fonts and render text
  • HashLibPlus - A C++11 library that provides an easy to use interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few. It also supports Incremental Hashing.
  • IntX - A C++11 port of IntX arbitrary precision Integer library with speed, about O(N * log N) multiplication/division algorithms implementation.
  • iod - Meta programming utilities for C++14.
  • Magic Enum - Static reflection for enums (to string, from string, iteration) for modern C++, work with any enum type without any macro or boilerplate code.
  • Wise Enum - Static reflection for enums similar to Magic Enum but works with C++ 11/14/17.
  • Nameof - A header-only C++17 library provides nameof macros and functions to obtain the simple name of variable, type, function, macro, and enum.
  • PEGTL - Parsing Expression Grammar Template Library (C++11, header-only).
  • random - A simple, convenient, header only Random for modern C++.
  • rang - A simple, modern & header only C++11 library for colors in your terminal.
  • range-v3 - Experimental range library for C++11/14/17.
  • SimpleBaseLib4CPP - A simple C++11 Base Encoding library that provides at the moment support for encoding and decoding various bases such as Base16, Base32 (various variants), Base58 (various variants), Base64 (various variants). [MIT]
  • simple_match - Simple header only pattern matching for c++14.
  • SRL-CPP - A Simple Regex Language builder library written in C++11 that provides an easy to use interface for constructing both simple and complex regex expressions. [MIT]
  • tweeny - A header only interpolation library with 30+ easing functions.
  • Vireo - A lightweight and versatile video processing library by Twitter.
  • indicators - Activity Indicators for Modern C++.
  • AssociatedEnum - header-only library for C++ for enumerations with associated values.
  • openFrameworks - an open source C++ toolkit for creative coding.
  • tabulate - Table Maker for Modern C++.

Tools

Misc

  • clang-format 🌟 - A tool to format C++ code.
  • clangd - understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more.
  • Compiler Explorer - Interactively explore the assembly output of your C++ code.
  • cquery - C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more (No more commits since Nov 27, 2018)
  • ccls - C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting, forked from cquery, which is under active development
  • irony-mode - A C/C++ minor mode for Emacs powered by libclang.
  • modern-cpp-font-lock-mode - Syntax highlighting support for Modern C++ with emacs

Dynamic analysis

  • sanitizers 🌟 - This project is the home for Sanitizers: AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer, and more.
  • Valgrind - is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.

Static analysis

  • cppcheck - is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs.
  • clang-tidy 🌟 - is a clang-based C++ “linter” tool. Its purpose is to provide an extensible framework for diagnosing and fixing typical programming errors, like style violations, interface misuse, or bugs that can be deduced via static analysis. clang-tidy is modular and provides a convenient interface for writing new checks.
  • clang-analyzer - is a source code analysis tool that finds bugs in C, C++, and Objective-C programs. It implements path-sensitive, inter-procedural analysis based on symbolic execution technique.

Fuzzing

  • American fuzzy lop - American fuzzy lop is a security-oriented fuzzer.
  • hongfuzz - A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer with interesting analysis options.
  • libFuzzer - A library for coverage-guided fuzz testing.

Build system

  • Bazel - is a fast, scalable, multi-language and extensible build system.
  • build2 - is a cross-platform build toolchain for developing and packaging C and C++ code.
  • CMake 🌟 - Cross-platform family of tools designed to build, test and package software.
  • Meson - is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.
  • XMake - is a cross-platform build utility based on Lua.

Package management

  • Buckaroo - Fully Decentralized Polyglot Package Manager for C++ and Friends
  • cget - CMake package retrieval.
  • conan - C/C++ package manager.
  • CPM - A CMake script for setup-free cross-plattform dependency management.
  • Hunter - Cross-platform package manager for C++.
  • vcpkg - C++ Library Manager for Windows, Linux, and MacOS
  • xrepo - A cross-platform C/C++ package manager based on Xmake.

About

This list was compiled by Erik Rigtorp with help from the C++ community: