C/C++从入门到精通-C/C++ 完整知识体系

6 阅读5分钟

C/C++ 完整知识体系

定位:面向 Java/Kotlin 深度开发者的 C/C++ 从入门到专家知识体系。

本体系不追求面面俱到的 API 罗列,而是围绕 Java/Kotlin 开发者转型时的认知鸿沟 构建,每个知识点都回答一个核心问题:"和 Java/Kotlin 有什么本质不同,为什么?"

难度级别说明

级别代号含义对应 Java/Kotlin 经验要求
L1入门理解基本概念,能读懂代码无 C++ 经验即可
L2基础能独立编写正确的小程序需要理解 C++ 与 Java 的根本差异
L3进阶能设计模块、理解性能含义需要扎实的 C++ 基础
L4高级能做架构决策、性能优化需要项目实战经验
L5专家理解语言实现细节,能做极限优化需要深入理解编译器与硬件

学习路径

Phase 1 生存 ──► Phase 2 胜任 ──► Phase 3 精通 ──► Phase 4 专家
 (L1-L2)          (L2-L3)          (L3-L4)          (L4-L5)
  2-4 周           4-8 周           8-16 周          持续积累

Phase 1:生存 (L1-L2) — "能写、能编译、不崩"

目标:建立正确的心理模型,避免最常见的坑。

主题核心问题关键认知
环境搭建怎么编译运行?编译器、构建系统、调试器
基础语法差异和 Java 有什么不同?头文件、命名空间、自由函数
RAII 与智能指针没有 GC 怎么管内存?资源获取即初始化,确定性销毁
标准库容器用什么代替 ArrayList/HashMap?std::vectorstd::mapstd::unordered_map
错误处理没有 checked exception?异常机制、std::optionalstd::expected

Phase 2:胜任 (L2-L3) — "写得好、跑得快"

目标:理解 C++ 的性能优势来源,写出高效且安全的代码。

主题核心问题关键认知
移动语义为什么 C++ 能比 Java 快?右值引用、完美转发、零成本抽象
模板基础泛型怎么写?函数模板、类模板、SFINAE 入门
并发基础多线程怎么安全写?std::threadstd::mutexstd::atomic
内存模型多线程到底发生了什么?happens-before、sequenced-before
性能分析怎么证明快?perf、Valgrind、编译器优化级别

Phase 3:精通 (L3-L4) — "架构级决策"

目标:能主导大型 C++ 项目的技术决策。

主题核心问题关键认知
模板进阶模板还能这么用?变参模板、折叠表达式、CRTP
Concepts怎么约束模板参数?C++20 Concepts、requires 子句
Ranges怎么优雅地处理数据管道?视图、动作、管道操作符
高级并发超越 mutex?无锁数据结构、std::jthreadstd::stop_token
大型项目架构怎么组织百万行代码?CMake 进阶、依赖管理、ABI 稳定性

Phase 4:专家 (L4-L5) — "语言级深度"

目标:理解语言实现机制,做极限性能优化。

主题核心问题关键认知
模板元编程编译期计算?constexpr、类型列表、编译期算法
协程深度C++20 协程底层?协程状态机、自定义 promise_type
无锁编程极致并发性能?CAS、ABA 问题、内存序
编译器内部编译器到底做了什么?AST、IR、优化 Pass
领域优化针对特定场景的极致优化SIMD、缓存优化、分配器定制

编译环境搭建

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install g++ cmake build-essential gdb

macOS

xcode-select --install
brew install cmake

Windows

  1. 安装 Visual Studio Build Tools
  2. 安装时勾选 "C++ 桌面开发" 工作负载
  3. 安装 CMake

验证安装

g++ --version      # 确认 g++ 可用(macOS 可用 clang++ 替代)
cmake --version    # 确认 cmake 可用

编译命令模板

# 基础编译(C++23 标准,全警告,O2 优化)
g++ -std=c++23 -Wall -Wextra -O2 example.cpp -o example && ./example

# 启用并发支持
g++ -std=c++23 -Wall -Wextra -O2 -pthread concurrent_example.cpp -o concurrent_example && ./concurrent_example

# 启用地址清理器(检测内存错误)
g++ -std=c++23 -Wall -Wextra -g -fsanitize=address example.cpp -o example && ./example

# 启用未定义行为清理器
g++ -std=c++23 -Wall -Wextra -g -fsanitize=undefined example.cpp -o example && ./example

# 调试模式(无优化,带调试信息)
g++ -std=c++23 -Wall -Wextra -g -O0 example.cpp -o example && gdb ./example

macOS 用户注意:将 g++ 替换为 clang++,macOS 默认使用 Clang 编译器,同样支持 C++23。

文档导航

#文件主题级别简介
00README知识体系总览学习路径、环境搭建、文档导航
01根本差异C++ 与 Java/Kotlin 的根本差异L1-L2编译模型、内存模型、UB、类型系统——建立正确心理模型的基石
02RAII 与资源管理RAII 与智能指针L1-L2没有 GC 的世界里,如何安全地管理所有资源
03标准库容器与算法标准库容器与算法L1-L2vector/map/unordered_map/算法库,替代 Java Collections
04错误处理错误处理L2异常、optionalexpected、错误码策略
05移动语义与值语义移动语义与值语义L2-L3右值引用、完美转发、零成本抽象的核心
06模板编程模板编程L2-L4从基础模板到变参模板、SFINAE、Concepts
07并发编程并发编程L2-L4线程、互斥锁、原子操作、内存模型、无锁编程
08性能分析与优化性能分析与优化L3-L4工具链、编译器优化、缓存、SIMD
09现代 C++ 特性现代 C++ 特性L2-L3Ranges、Coroutines、Modules、constexpr
10大型项目架构大型项目架构L3-L4CMake、依赖管理、ABI、头文件管理
11模板元编程模板元编程L4-L5编译期计算、类型操纵、编译期算法
12专家主题专家主题L4-L5编译器内部、极限优化、领域特定技术