我学习和使用 C/C++ 开发快 13 年了,目前在大厂做架构,我学习 C/C++ 过程中踩了一个又一个坑,深知新手学习 C/C++ 的重要性和存在的困难,因此特地给 C/C++ 开发的同学精心准备了一份优质学习资料————CppGuide,内容从 C/C++ 语言、网络编程、操作系统原理到完整的项目源码分析,同时这份资料也包括 C/C++ 学习方法、推荐的阅读书籍、简历指导和求职技巧等。
一、理论知识
作为一个用了十多年的 C++ 开发者及面试官,我们的项目基本上全改用 C++11 开发了。我的建议是,掌握常用的即可,大致列一下知识点:
-
auto关键字
-
for-each循环
-
右值及移动构造函数
-
std::forward
-
std::move
-
stl容器新增的emplace_back()方法
-
std::thread库
-
std::chrono库
-
智能指针系列(std::shared_ptr/std::unique_ptr/std::weak_ptr)(智能指针的实现原理一定要知道,最好是自己实现过)
-
线程库std::thread
-
线程同步技术库std::mutex/std::condition_variable/std::lock_guard等
-
lambda表达式(JAVA中现在也常常考察lambda表达式的作用)
-
std::bind/std::function库
-
其他的就是一些关键字的用法(override、final、delete)
还有就是一些细节如可以像 JAVA 一样在类成员变量定义处给出初始化值。
C++11/14 网上的资料已经很多了,C++17 的资料不多,重头戏还是 C++11 引入的各种实用特性,这就给读者推荐一本我读过的:
-
《深入理解 C++11:C++11 新特性解析与应用》
-
《深入应用 C++11:代码优化与工程级应用》
-
《C++17 完全指南》
-
《Cpp 17 in Detail》
链接: https://pan.baidu.com/s/1CSlVJCGqvcC5lwcZqZB7xw 提取码: xbf2
另外,我在我自己出版的《C++ 服务器开发精髓》一书的第一章和第三章中详细地介绍了 C++11/14/17 新增的常用特性,部分目录如下:
1.3 C++ 11/14/17新增的实用特性... 17
1.4 统一的类成员初始化语法与std::initializer_list. 19
1.5 C++ 17注解标签(attributes)... 24
1.5.1 C++ 98/03的enumeration和C++ 11的enumerator 25
1.5.2 C++ 17的注解标签... 25
1.6 final、override关键字和=default、=delete语法... 28
1.7 auto关键字的用法... 34
1.8 Range-based循环语法... 35
1.8.1 自定义对象如何支持Range-based循环语法... 37
1.8.2 for-each循环的实现原理... 38
1.9 C++ 17结构化绑定... 39
1.10 stl容器新增的实用方法... 43
1.10.1 原位构造与容器的emplace系列函数... 43
1.10.2 std::map的try_emplace方法与insert_or_assign方法... 44
1.11 stl 中的智能指针类详解... 52
3.4.3 C++ 11对整型变量原子操作的支持... 187
3.7 C++ 11/14/17线程同步对象... 244
3.7.1 std::mutex系列... 244
3.7.2 std::shared_mutex. 248
3.7.3 std::condition_variable. 253
3.10.3 C++ 11 的 thread_local 关键字... 267
二、推荐的开源项目
C++11/14/17 的语法虽然很实用,但是需要一定的练习才能掌握,推荐几个学习 C++11/14/17 的开源项目:
1. Filezilla
Filezilla 界面
Filezilla 是一款开源的 FTP 软件,我已经将全套源码整理配置好了,可以在 VS2013 下一键编译调试和运行,源码下载地址如下:
链接: https://pan.baidu.com/s/1vyEGvLo88EsPZoU0hBYzhA 提取码: ccbf
2. uWebSocket 网络库
这是我用 uWebSocket 做的某交易系统推送服务:
uWebSocket 是一款开源的 WebSocket 库,最新版使用了大量 C++17 的语法,美中不足的是这个库代码存在不少 bug,我在项目中使用了它,但修改了其大量的 bug,有兴趣的朋友也可以下载下来看一下:
下载地址:
3. TeamTalk 的 PC 端
TeamTalk 是蘑菇街开源的一款用于企业内部的即时通信工具,其下载地址是:
https://github.com/balloonwj/TeamTalk/tree/master/win-client
4. 最后是我的开源 Flamingo IM
源码链接:
GitHub - balloonwj/flamingo: flamingo 一款高性能轻量级开源即时通讯软件
我为 Flamingo 专门录制了三部高清技术讲解视频以方便读者学习,视频中介绍了Flamingo的编译和部署方法、整体架构、各个模块的技术实现细节以及如何学习Flamingo的方法,视频下载链接:
链接: https://pan.baidu.com/s/1rVcQhc-HJ9-UwQAFe7P2ug 提取码: id63
三、完整的书单
最后分享一下我精心整理的 C++ 进阶书单: