开源一套正在建设的现代 C++ 教程!

开源一套正在建设的现代 C++ 教程!

🚀开源一套正在建设的现代 C++ 教程!

笔者吐槽:靠有点像卖课的,但真不是,笔者纯出于兴趣维护的。笔者想了想,有时候光看各种各样的文章。显得太零碎。亮出来代码示例吧,显得太冗余。那为什么不专门维护一个仓库好好做这个事情呢?

所以笔者决定,试试看利用Github仓库托管一下。

TL;DR

好的教程都有TL;DR,一句话——这边请:

GitHub Pages: 点击访问,获得更好更加流畅的阅读体验(嘶,Github静态网页有可能访问速度比较慢,如果有朋友有需求,可以尝试看看下面的仓库克隆下来本地预览)

啥,想看看原仓库,在这里:

👉:Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP: 现代 C++ 嵌入式(MCU/Linux)开发完整教程,深入讲解 C++11–C++23、零开销抽象、RAII 与性能优化!

现在正在想办法看看支持模拟机和真机实战确保代码可靠。(别喷别喷,方案真没想好,感兴趣的话朋友随意在评论区提意见,小的速速核时是否可行!)

所有的文章还会持续的在公众号,知乎和ZEEKLOG上进行同步!请各位放心(含泪干活中)


项目介绍

Tutorial_AwesomeModernCPP 是一套完整的、系统化的嵌入式现代 C++ 开发教程。不计划只停留在简单的语法介绍,因为那样,我们更应该去看CPPReference。而是尝试探讨如何在嵌入式系统中高效使用 C++,涵盖性能优化、内存管理、硬件交互等核心主题。

🌟 项目亮点

1️⃣ 系统化的知识体系

教程从零开始,循序渐进地构建知识体系:

Chapter 0: 前言与基础 ──────┐ Chapter 1: 构建工具链 │ Chapter 2: 零开销抽象 ├── 核心基础 Chapter 3: 内存与对象管理 │ Chapter 4: 编译期计算 ─┘ │ ├─→ Chapter 5: 内存管理策略 ├─→ Chapter 6: RAII 与智能指针 ├─→ Chapter 7: 容器与数据结构 ├─→ Chapter 8: 类型安全与工具类型 ├─→ Chapter 9: 函数式编程特性 └─→ Chapter 10: 并发与原子操作 
2️⃣ 完整的代码示例
  • 160+ 可独立编译的代码文件
  • 44 个 CMake 项目
  • 涵盖 STM32、Linux 等多种平台
  • 每个示例都有详细注释
// 示例:RAII 管理 GPIO 引脚classGPIOPin{public:GPIOPin(uint8_t pin, GPIODir dir)noexcept{hal_gpio_config(pin_, dir);}~GPIOPin()noexcept{// 自动恢复引脚状态hal_gpio_config(pin_, GPIODir::Input);}// 禁止拷贝,允许移动GPIOPin(const GPIOPin&)=delete;// ...};
3️⃣ 现代化的学习体验
  • 🏷️ 标签分类 - 按主题快速查找相关内容
  • 📊 难度分级 - beginner / intermediate / advanced
  • 🔍 智能导航 - 自动推荐相关文章
  • ⏱️ 阅读时间 - 帮助规划学习进度

核心内容预览

📚 零开销抽象

教你如何在嵌入式环境中安全使用 C++ 的抽象能力,而不产生额外的运行时开销。

🧠 RAII 与智能指针

资源自动管理是 C++ 的杀手锏。在嵌入式场景下,RAII 可以让你的外设管理更安全、更简洁。

📦 嵌入式友好的容器

std::arraystd::span、循环缓冲区…掌握这些工具,告别裸数组操作。

⚡ 编译期编程

constexprconsteval、模板元编程…把计算从运行时转移到编译时,零开销!

🔗 并发与原子

在多核 MCU 上编写安全的高效代码,掌握 std::atomic 和内存模型。


如何开始学习

🌐 在线阅读

教程已部署为静态网站,方便随时访问:

GitHub Pages: 点击访问

💻 本地运行

哈?你说想本地跑起来吗?

# 克隆仓库git clone https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP.git cd Tutorial_AwesomeModernCPP # 安装依赖并启动预览bash scripts/mkdoc_setup_local_dependency.sh bash scripts/local_preview.sh # 打开浏览器访问 http://127.0.0.1:8000

📖 学习建议

  1. 按顺序学习 - 教程设计循序渐进,建议从 Chapter 0 开始
  2. 动手实践 - 每个示例代码都可以独立编译运行
  3. 参考标签 - 遇到问题时,通过标签系统查找相关内容
  4. 循序渐进 - 根据难度等级选择适合的内容

适用人群

人群收益
嵌入式 C 开发者掌握现代 C++,提升代码质量
C++ 初学者了解 C++ 在嵌入式中的正确用法
嵌入式工程师学习资源受限环境下的最佳实践
计算机专业学生系统学习嵌入式 C++ 开发

开源贡献

本项目由 Awesome Embedded Learning Studio 维护,采用 MIT 协议开源。我们欢迎任何形式的贡献:

  • 📝 修正错别字和语法错误(别骂了别骂了,真是笔误)
  • 💡 提出改进建议(仓库有些CI流程,但是笔者不太熟悉CI,其他地方都可以随意Issue)
  • 🔧 提交代码改进(一些代码示例并不好,或者写法非常不规范,笔者也是C++刚学没太久,希望各位前辈批评!)
  • 📖 完善文档(有一些笔者必须指出是AI写,我审核修改的,肯定有不完美的地方,欢迎批评!)
  • 🐛 报告 Bug(Issue,请,速速修我)

仓库地址: https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP


结语

每一次写文章都要纠结一会结语。那就这样——

换一种更新的方式,理解现代C++。也让嵌入式开发更现代、更高效、更优雅!

私货时间

到这里就可以溜了各位,下面是笔者的真私货

Read more

【C++指南】STL容器的安全革命:如何封装Vector杜绝越界访问与迭代器失效?

【C++指南】STL容器的安全革命:如何封装Vector杜绝越界访问与迭代器失效?

🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 使用STL的三个境界:能用,明理,能扩展 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦! 了解vector常用接口 vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 常见构造 (constructor)构造函数声明接口说明vector()(重点)无参构造vector(size_type n, const value_type& val = value_type())构造并初始化n个valvector (const vector& x); (重点)拷贝构造vector (InputIterator first, InputIterator last)

By Ne0inhk
C++11新特性(下)----《Hello C++ Wrold!》(26)--(C/C++)

C++11新特性(下)----《Hello C++ Wrold!》(26)--(C/C++)

文章目录 * 前言 * lambda表达式 * 可变参数模板 * 展开参数包的方法 * 应用 * 包装器 * fiction包装器 * bind函数 * 作业部分 前言 在 C++11 标准带来的诸多革命性特性中,“简化代码编写” 与 “统一可调用对象管理” 是两大核心目标。lambda 表达式解决了传统仿函数 “定义繁琐、复用性低” 的痛点,让局部场景下的自定义逻辑(如排序规则、回调函数)能以更简洁的匿名函数形式实现;可变参数模板则打破了模板参数数量固定的限制,为 STL 容器(如emplace_back)和通用函数设计提供了灵活的参数处理能力;而 function 包装器与 bind 函数,则进一步整合了函数指针、仿函数、lambda 等不同类型的可调用对象,实现了统一管理与参数适配,甚至让可调用对象存储到容器中成为可能。 这些特性并非孤立存在 ——lambda 的底层依赖仿函数实现,可变参数模板为emplace系列接口提供了技术支撑,

By Ne0inhk
平衡二叉搜索树之 红黑 树的模拟实现【C++】

平衡二叉搜索树之 红黑 树的模拟实现【C++】

文章目录 * 红黑树的简单介绍 * 定义 * 红黑树的特性 * 红黑树的应用 * 全部的实现代码放在了文章末尾 * 准备工作 * 包含头文件 * 类的成员变量和红黑树节点的定义 * 构造函数和拷贝构造 * swap和赋值运算符重载 * 析构函数 * find * insert【重要】 * 第一步:按照二叉搜索树的方式插入新节点 * 第二步:调整颜色,维护红黑树的规则 * 情况一:新插入的节点的父亲节点颜色为黑 * 情况二:新插入的节点的父亲节点颜色为红,且叔叔节点不为空且为红 * 情况三:新插入的节点的父亲节点颜色为红,且叔叔节点为空或者为黑 * empty * size * 中序遍历 * 红黑树和AVL树的比较 * 全部代码 红黑树的简单介绍 定义 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,只能是Red或Black。 通过对任何一条从根到空节点的路径上各个结点着色方式的限制 红黑树确保没有一条路径会比其他路径长出俩倍,即最长路径的长度最多是最短

By Ne0inhk

C++:实现四舍五入(附带源码)

项目背景详细介绍 在数学计算、金融系统、工程测量、图像处理以及各种业务系统中,四舍五入是最基础、也是最容易被低估的一个问题。 很多初学者认为“四舍五入”只是简单地调用一个函数即可,例如: round(x) 但在实际开发中,问题远比想象复杂: * 不同业务对“四舍五入”的定义并不完全相同 * C++ 标准库中的 round / floor / ceil 行为容易混淆 * 浮点数本身存在精度误差 * 保留 N 位小数时,错误极易产生 例如: 2.675 四舍五入到 2 位小数 结果是 2.67 还是 2.68? 在不同语言、不同实现中,答案甚至可能不同。 因此,深入理解并亲自实现“四舍五入”逻辑,是 C+

By Ne0inhk