在看完读完一些大神的课程与书籍后,总结了一下现代cpp的学习路线与经验,无非就是大概两个方向。不论哪个方向当然就是学习基本的语法,变量循环结构数组函数等等等。
第一条路线
简要来说就是按照语法,基本语法特性,然后逐渐学习
第一阶段(基础c++98/03)
我先说第一条路线,首先学习经典c++语法,然后理解值/引用/指针/内存/构造函数这些最根本的东西!!!
关键内容:
变量、函数、作用域、指针与引用
面向对象三大特性(封装/继承/多态)
类的构造函数/析构函数/拷贝构造/赋值运算符
容器(
std::vector
,std::map
,std::string
)手动内存管理(new/delete)👈为理解智能指针做准备
推荐时间:1~2 周(如果已有 C 语言基础)
第二阶段的时候(c++11/14)
目标:掌握现代 C++ 最关键的写法,能看懂别人“高级写法”不懵。
必须掌握的现代特性:
- autodecltypedecltype(auto)
- 范围 for 循环(range-based for)
- nullptrenum class
- 移动语义(std::move
、右值引用)
- 智能指针(std::shared_ptr
, std::unique_ptr
)🔥
- lambda 表达式
- 初始化列表(int x{42};std::vector<int> v{1,2,3};
)
- std::functionstd::bind
推荐资源:
- 《Effective Modern C++》by Scott Meyers
- [CppReference](https://en.cppreference.com/)(现代 C++ 查阅圣经)
当然看cherno的课程也挺不错的
第三阶段就是c++17新特性
目标:开始写更现代、更干净的 C++,提升工程能力。
重点特性:
if constexpr
(编译期判断)structured bindings
(结构化绑定:auto [x, y] = pair
)std::variant
,std::optional
,std::any
std::filesystem
(处理文件路径)std::string_view
(高效字符串)inline variables
第四阶段就是c++20->c++23
目标:写出优雅、泛型、安全、现代范的代码(可选)
进阶特性:
concepts
(泛型约束)ranges
库(代替传统迭代器)协程
co_await/co_yield
模块(Module)
模式匹配(待标准化)
这时候基本上就已经掌握了很多cpp的新特性了,但是学习语言不是为了装,或者别的什么,学习的最终目的是为了写出更安全更高效的代码,尽量少写错,多写快。是为了更加工程级。这时候就可以多读读别人的代码库,可以自己编译调试,然后可以看看insights的语法糖底层。
第二条路线可以说是经典派,就是面对过程,面对对象,然后一些高级流程,在学一些cpp库,之后就是泛型 模板 并发。
我这边写完提示词,让gpt给出了一个学习计划,如下:
✅ 四周现代 C++ 学习计划(适合有基础的你)
🎯 总目标:
能用现代 C++(11/14/17)语法写出清晰、安全、高效的代码,并能看懂别人写的“现代风格”代码。
📅 第 1 周:夯实基础 + 掌握 auto、引用、智能指针
📘 理论学习:
C++ 语法回顾:值/引用/指针的区别
auto、decltype、decltype(auto)
引用折叠 & 推导规则(auto vs auto& vs const auto&)
智能指针:
unique_ptr
,shared_ptr
,weak_ptr
lambda 基础语法、捕获列表
🧪 小练习:
写一个函数模板,使用
auto&
、const auto&
推导参数类型模拟写一个资源类,管理资源生命周期,手动用
unique_ptr
替代new/delete
📅 第 2 周:现代 STL 用法 + lambda 实战 + 移动语义
📘 理论学习:
范围 for 循环
初始化列表(
{}
初始化 vs=
初始化)lambda 捕获详解 +
std::function
的用法移动语义:右值引用、
std::move
、std::forward
emplace_back
和push_back
区别
🧪 小练习:
用
lambda
写一个自定义排序编写一个容器类,使用
move constructor
实现移动操作std::vector<std::unique_ptr<T>>
的练习
📅 第 3 周:C++17 新特性 + 类型工具箱(variant、optional)
📘 理论学习:
if constexpr
structured bindings
(结构化绑定)std::variant
,std::optional
,std::any
std::string_view
constexpr
/inline
变量模拟 Rust-style match with
std::visit
🧪 小练习:
写一个函数,返回
std::optional<std::string>
,表示“可能没有结果”用
std::variant
表示一个“多类型消息体”,配合visit
模拟 match 语法写一个函数模板,支持 constexpr 下运行
📅 第 4 周:项目实战 + 泛型思维训练
📘 理论学习:
函数模板 & 类模板
template<typename T>
,enable_if
,decltype
,std::is_xxx
泛型编程思想(可阅读 Boost 或 STL 实现)
学习他人写法(Github 项目代码阅读)
🛠 项目实战建议(选一个):
图算法工具(可复用你的图论知识) ➜ 用现代 C++ 写一个二分图匹配或最短路工具,结合模板 + lambda + vector
迷你 HTTP 请求模拟器 ➜ 处理字符串、状态枚举、文件路径,可练习 variant + string_view + optional
简化版的 Web 漏洞扫描器模块 ➜ 模拟 request/response,用现代语法包裹模块(正好结合你的项目)
🧩 每天建议安排(可调)
📚 学习资源推荐
🎥 视频推荐:
📘 书籍推荐:
《Effective Modern C++》by Scott Meyers
《C++17 STL 实战手册》
📄 官方文档:
✅ 到第4周你能做到:
熟练掌握现代写法(auto、lambda、智能指针、variant等)
理解 C++ 风格的多样性,看到别人代码不懵
有一个练手项目,巩固所学知识
能开始刷一些现代 C++ 面试题/Leetcode 用现代风格写代码
c++的视频书籍浩如烟海,你总觉得自己大成的时候,其实没准才入门。
我一个读书派的朋友给出的:
c++essential,c++ primer
深度探索c++对象模型,c++stl源码剖析
effective c++,c++并发实战
c++20设计模式
大规模c++软件开发 卷1:过程与架构
现代c++语言核心特性解析
高级C/C++编译技术
c++23高级编程, c++ core guidelines, c++20模板元编程
c++函数式编程
同一个序号之间没有特别的严格的顺序,也可以穿插着读,书籍的密度总是比视频大得多,但是没有视频通俗易懂,这其中可以自己取舍。
评论