现代C++精选
现代C++资源集合。
目标是收集一系列资源,帮助人们学习和利用C++11及更新版本的现代C++。
贡献
要添加、删除或更改列表中的内容: 请向GitHub仓库提交pull request。
书籍
- C++导览 (Bjarne Stroustrup) [C++11/17/20]
- C++程序设计语言 (Bjarne Stroustrup) [C++11]
- Effective Modern C++ (Scott Meyers) [C++11/14]
- 新C++概览 (Scott Meyers) [C++11/14]
- C++核心指南 (Bjarne Stroustrup, Herb Sutter) [C++11/14/17] - 使用现代C++的指南。
- C++并发编程实战 (Anthony Williams) [C++11/14/17] - 使用标准C++编写多线程代码的参考和指南。
- C++17 - 完全指南 (Nicolai M. Josuttis) [C++17] - 关于如何使用C++17语言和库特性的指导。
- Professional CMake (Craig Scott) - 使用CMake构建C++项目的实用指南。
- 现代C++教程:C++11/14/17/20入门 (欧长坤) - 该书声称是"即学即用"。其目的是全面介绍与现代C++(2020年之前)相关的功能。
要全面了解C++书籍,请参阅 Stackoverflow权威C++书籍指南和列表。
社区
查找最新的C++新闻和更新:
收听最新的C++播客:
- CppCast (YouTube, Twitter) - 第一个由C++开发者为C++开发者制作的播客!
- Cpp.chat (YouTube, Twitter) - 对C++的评论和C++程序员感兴趣的问题。
- C++ Weekly - Jason Turner的教育视频。
阅读最新的C++标准提案:
讨论所有与C++相关的内容:
- r/cpp - C++ subreddit。
- C++ Slack - C++ Slack工作区。
- CoreHard Telegram群组。
提出您的C++问题:
- r/cpp_questions - C++问答的subreddit。
- Stackoverflow C++ / C++11 / C++14 / C++17 / C++20 - Stackoverflow上关于C++的问题。
也许您的问题已经在FAQ中得到了回答?:
参加众多C++会议之一:
寻找C++用户组:
- Meeting C++用户组列表。
- C++ 超级FAQ中的用户组列表。
- C/C++ meetups。
- 在C++ Slack中搜索以
#ug
开头的频道。
演讲
TODO 整理一份关于如何使用C++11/17/20特性简化代码的优秀演讲列表
从SG20教育和C++教学推荐视频开始。
- CppCon 演讲 - C++大会的演讲。
- CppCon 2014: Bjarne Stroustrup "让简单的任务变得简单!"
- CppCon 2014: Herb Sutter "无锁编程(或者说,杂耍剃刀片),第一部分"
- CppCon 2014: Herb Sutter "无锁编程(或者说,杂耍剃刀片),第二部分"
- CppCon 2014: Scott Meyers "类型推导以及为什么你应该关心"
- CppCon 2015: Bjarne Stroustrup "编写好的C++14"
- CppCon 2015: Herb Sutter "默认编写好的C++14..."
- CppCon 2016: Chandler Carruth "垃圾进,垃圾出:关于未定义行为的争论..."
- CppCon 2016: Herb Sutter "C++中的默认无泄漏..."
- CppCon 2017: Jason Turner "实用C++17"
- CppCon 2018: Jonathan Boccara "105个STL算法,不到一小时"
- code::dive conference 2014 - Scott Meyers: CPU缓存以及为什么你应该关心 (幻灯片)
- code::dive conference 2015 - Andrei Alexandrescu - 编写快速代码 I (幻灯片)
- code::dive conference 2015 - Andrei Alexandrescu - 编写快速代码 II (幻灯片)
- C++Now 演讲 - C++Now大会的演讲。
- Going Native 2012: 可变参数模板很有趣
- Going Native 2013: Stephan T Lavavej - "不要帮助编译器"
- Going Native 2013: Sean Parent - "C++调味料"
博客
- Andrzej的C++博客 - C++指南和思考。
- Anthony Williams的博客
- 嵌入学术界 - John Regehr,美国犹他大学计算机科学教授。
- Eric Niebler
- 流畅的C++ - C++中富有表现力的代码。
- 每周大师(新帖) - 由Herb Sutter创建和撰写的一系列C++编程问题。
- 每周大师(旧帖) - 较早的每周大师帖子。
- Marshall的C++沉思
- Paul Fultz II的博客
- Preshing谈编程
- 简化C++ - 编写干净且可维护的C++。
- Sticky Bits - 一个关注实时和嵌入式系统软件开发的博客。
- Sutter's Mill - Herb Sutter谈软件开发。
- 来自Aristeia的观点 -Scott Meyers的专业活动和兴趣。
- Visual C++团队博客
- 为什么乌鸦像写字台?
网站
- C++最佳实践 - C++最佳实践的协作集合。
- C++模式 - 现代C++模式的仓库。
- C++参考🔥 - C++参考。
- C++ By Example - 通过示例学习C++!
项目启动模板
- ModernCppStarter - 一个用于启动现代C++项目的模板,使用CMake、CI、代码覆盖率、clang-format、可重现的依赖管理等。
- modern-cpp-template - 一个现代C++项目的模板,使用CMake、Clang-Format、CI、单元测试等,支持下游包含。
- cmake_template - 一个模板CMake项目,帮助您开始使用C++和工具。
- Pitchfork - Pitchfork是一组C++项目约定。
库
这并不是所有C和C++库的综合列表。它是具有普遍适用性(序列化、数据库、测试等)的高质量现代库,或新颖使用新C++特性的高质量库的列表。
综合 / 框架
- abseil - Abseil是一个开源的C++代码集合(符合C++11标准),旨在扩充C++标准库。
- Boost - C++库集合。
- Folly - Facebook开源库。
- POCO - POCO C++库是功能强大的跨平台C++库,用于构建可在桌面、服务器、移动、物联网和嵌入式系统上运行的网络和互联网应用程序。
- nonstd-lite - *-lite仓库的父级,为pre-C++11环境提供迁移到post-C++11特性的路径。
- xtd - 现代C++17/20框架,用于在Windows、macOS、Linux、iOS和Android上创建控制台(CLI)、表单(类似WinForms的GUI)和tunit(类似Microsoft单元测试框架的单元测试)应用程序。
测试
- Approval Tests for C++ - 适用于Linux、Mac和Windows的原生C++ ApprovalTests。
- autocheck - C++版QuickCheck和SmallCheck克隆。
- Bandit - 一个C++11的头文件库,旨在使单元测试成为愉快的体验。
- Boost:UT - C++20 μ(微型)/单元测试框架,单头文件,无需宏。
- Boost.Test - Boost测试框架。
- Catch 🔥 - 一个现代的、C++原生的、仅头文件的单元测试、TDD和BDD框架。
- clean-test - 一个现代C++20测试框架。
- doctest 🚀 - 最快的功能丰富的C++11/14/17/20单头文件测试框架,用于单元测试和TDD。
- Fakeit - 简化C++模拟。一个简单但表达力强的仅头文件C++模拟库。
- Googletest - Google测试和模拟框架。
- Mull - 实用的C和C++变异测试工具
- rapidcheck - C++版QuickCheck克隆。
- snitch - 轻量级C++20测试框架。
基准测试
用于创建微基准测试的库和框架。
- Celero - C++基准测试编写库/框架。
- Google Benchmark 🌟 - 微基准测试支持库。
- hayai - C++基准测试框架。
- Nonius - C++微基准测试框架。
- nanobench - 简单、快速、准确的单头文件C++11/14/17/20微基准测试功能
日志
线程
- concurrentqueue - 快速的多生产者、多消费者无锁并发队列,适用于C++11。
- Cpp-Taskflow - 现代C++并行任务编程库
- Junction - C++并发数据结构。
- MPMCQueue - 用C++11编写的有界多生产者多消费者无锁队列。
- SPSCQueue - 用C++11编写的有界单生产者单消费者无等待无锁队列。
- Threading Building Blocks - Threading Building Blocks (TBB)是Intel开发的C++模板库,用于多核处理器上的并行编程。使用TBB,计算被分解为可并行运行的任务。该库管理和调度线程以执行这些任务。
- execq - 智能队列,以线程池方式(串行/并发)执行任务,适用于C++11。
- concurrencpp - 一个通用并发库,包含任务、执行器、定时器和C++20协程来管理它们。
解析和序列化
- json 🥇 - 现代C++的JSON库。
- jsoncpp - 用于与JSON交互的C++库。
- toml++ - 用于解析TOML v0.5.0及更高版本的仅头文件C++17库。
- tinytoml - 用于解析TOML的仅头文件C++11库。
- yaml-cpp - C++的YAML解析器和生成器。
- cpptoml - 用于解析TOML配置文件的仅头文件库。
- cereal - C++11序列化库。
- cista - C++17高性能零拷贝二进制序列化库。
- simdjson - 使用常用SIMD指令加速JSON解析
- Boost.JSON - 支持自定义分配器的JSON库。
- hjson-cpp - 用于读写Hjson和/或JSON文件的C++11库。
- json_struct - 高性能、单头文件JSON解析器,直接解析到C++结构体。
- daw_json_link - C++中快速、方便的JSON序列化和解析
字符串格式化和模板
- {fmt} - 小型、安全、快速的格式化库。
- Inja - 现代C++的模板引擎。
- Mustache - C++11的Mustache文本模板。
- tinyformat.h - 最小的、类型安全的C++ printf替代库。
- pprint - 现代C++的美化打印器。
脚本
- sol2 - C++绑定Lua的库。
- ChaiScript - 易于使用的C++嵌入式脚本语言。
- pybind11 - C++11和Python之间的无缝操作性。
Web / HTTP
- Beast - 基于Boost.Asio的C++11 HTTP和WebSocket库。
- cpprestsdk - C++ REST SDK是微软的项目,用于原生代码中基于云的客户端-服务器通信,使用现代异步C++ API设计。该项目旨在帮助C++开发者连接和与服务交互。
- cpr - C++ Requests:适合人类使用的Curl,Python Requests的精神移植版。
- Crow - 快速且易用的微框架,用于创建Web服务器(受Python Flask启发)。
- dmbcs-micro-server - 基于C++20的JSON、HTML、文本和PNG over HTTP;将服务器嵌入应用程序以提供基于Web的UI的简单方法。
- Drogon - 基于C++14/17的高性能HTTP应用框架
- oat++ - 高性能Web框架(C++11,零依赖)。
- pistache - 优雅的C++ REST框架。
- restbed - Restbed框架为C++11应用程序带来异步RESTful功能。
数据库
- mongo-cxx-driver - MongoDB的C++驱动程序。
- redox - 现代、异步且超快的C++11 Redis客户端。
- sqlite_orm - 强大的仅头文件SQLite3 ORM库,适用于C++14。
- sqlite3pp - SQLite3 API的C++封装。
- sqlpp11 - C++的类型安全SQL模板库。
- libpqxx - PostgreSQL的官方C++客户端API。
- TinyORM - 现代C++ ORM库。
BioC++
- SeqAn - 用于序列分析的现代C++库(C++17,C++20)。
杂项
- ASAP - 用于解析、显示、操作和迭代日期的仅头文件库。
- BigIntegerCPP - 一个C++11大整数库,具有高效的性能、简单的本质和清晰的设计。
- CAF - C++中Actor模型的开源实现。
- Cinder - Cinder是一个用于C++专业质量创意编码的免费开源库。
- Conduit - 基于协程TS的高性能流。
- cppitertools - C++14的itertools(python)实现
- cxxopts - 轻量级C++命令行选项解析器。
- date - 基于C++11/14/17
头文件的日期和时间库。 - docopt.cpp - docopt创建漂亮的命令行界面。
- EnTT - 一个仅头文件、快速且可靠的现代C++实体组件系统(ECS)。
- Font Chef - 用于处理字体和渲染文本的C99和C++14库
- HashLibPlus - 一个C++11库,提供了易于使用的接口,用于计算字符串、文件、流、字节数组和未类型化数据等的哈希和校验和。它还支持增量哈希。
- IntX - IntX任意精度整数库的C++11移植版,具有约O(N * log N)的乘法/除法算法实现速度。
- iod - C++14的元编程实用工具。
- Magic Enum - 现代C++的枚举静态反射(转字符串、从字符串、迭代),适用于任何枚举类型,无需任何宏或样板代码。
- Wise Enum - 类似Magic Enum的枚举静态反射,但适用于C++ 11/14/17。
- Nameof - 一个仅头文件的C++17库,提供nameof宏和函数,用于获取变量、类型、函数、宏和枚举的简单名称。
- PEGTL - 解析表达式文法模板库(C++11,仅头文件)。
- random - 一个简单、方便、仅头文件的现代C++随机数库。
- rang - 一个简单、现代且仅头文件的C++11库,用于终端中的颜色。
- range-v3 - C++11/14/17的实验性范围库。
- SimpleBaseLib4CPP - 一个简单的C++11基础编码库,目前支持编码和解码各种基础,如Base16、Base32(各种变体)、Base58(各种变体)、Base64(各种变体)。[MIT]
- simple_match - C++14的简单仅头文件模式匹配库。
- SRL-CPP - 一个用C++11编写的简单正则表达式语言构建库,提供了一个易于使用的接口,用于构建简单和复杂的正则表达式。[MIT]
- tweeny - 一个仅头文件的插值库,包含30多种缓动函数。
- Vireo - Twitter开发的轻量级多功能视频处理库。
- indicators - 现代C++的活动指示器。
- AssociatedEnum - C++的仅头文件库,用于带有关联值的枚举。
- openFrameworks - 一个用于创意编码的开源C++工具包。
- tabulate - 现代C++的表格制作工具。
工具
杂项
- clang-format 🌟 - 一个格式化C++代码的工具。
- clangd - 理解你的C++代码并为你的编辑器添加智能功能:代码补全、编译错误、跳转到定义等。
- Compiler Explorer - 交互式探索C++代码的汇编输出。
- cquery - 支持数百万行代码库的C/C++语言服务器,由libclang提供支持。支持Emacs、Vim、VSCode和其他支持语言服务器协议的编辑器。提供交叉引用、补全、诊断、语义高亮等功能(自2018年11月27日起不再更新)
- ccls - 支持交叉引用、层次结构、补全和语义高亮的C/C++/ObjC语言服务器,从cquery分叉而来,正在积极开发中
- irony-mode - 由libclang驱动的Emacs C/C++次要模式。
- modern-cpp-font-lock-mode - Emacs中现代C++的语法高亮支持
动态分析
- sanitizers 🌟 - 这个项目是Sanitizers的家:AddressSanitizer、MemorySanitizer、ThreadSanitizer、LeakSanitizer等。
- Valgrind - 是一个用于构建动态分析工具的instrumentation框架。有Valgrind工具可以自动检测许多内存管理和线程错误,并详细分析你的程序。你还可以使用Valgrind构建新工具。
静态分析
- cppcheck - 是一个C/C++代码的静态分析工具。它提供独特的代码分析以检测bug,并专注于检测未定义行为和危险的编码结构。
- clang-tidy 🌟 - 是一个基于clang的C++"linter"工具。其目的是提供一个可扩展的框架,用于诊断和修复典型的编程错误,如风格违规、接口误用或通过静态分析可以推断出的bug。clang-tidy是模块化的,并提供了一个便捷的接口来编写新的检查。
- clang-analyzer - 是一个源代码分析工具,可以找出C、C++和Objective-C程序中的bug。它基于符号执行技术实现了路径敏感、过程间分析。
模糊测试
- American fuzzy lop - American fuzzy lop是一个面向安全的模糊测试器。
- hongfuzz - 一个面向安全、反馈驱动、进化的、易于使用的模糊测试器,具有有趣的分析选项。
- libFuzzer - 一个用于覆盖率引导模糊测试的库。
构建系统
- Bazel - 是一个快速、可扩展、多语言和可扩展的构建系统。
- build2 - 是一个用于开发和打包C和C++代码的跨平台构建工具链。
- CMake 🌟 - 用于构建、测试和打包软件的跨平台工具集。
- Meson - 是一个开源构建系统,旨在既极快又尽可能用户友好。
- XMake - 是一个基于Lua的跨平台构建工具。
包管理
- Buckaroo - 完全去中心化的C++及其他语言的多语言包管理器
- cget - CMake包获取工具。
- conan - C/C++包管理器。
- CPM - 一个用于无需设置的跨平台依赖管理的CMake脚本。
- Hunter - 跨平台C++包管理器。
- vcpkg - 适用于Windows、Linux和MacOS的C++库管理器
- xrepo - 基于Xmake的跨平台C/C++包管理器。
关于
这个列表由Erik Rigtorp在C++社区的帮助下编译: