返回课程
AI013 Professional

现代 C++ 教程

本教程旨在为有经验的开发者提供 C++11/14/17/20 新特性的快速参考。内容涵盖语言易用性改进、运行时性能提升、新容器、智能指针与内存管理、正则表达式、并发编程,以及对 C++20 的前瞻介绍。

4.8
30.0h
318 名学生
2 点赞
人工智能
开始学习

课程概述

📚 内容概要

本教程旨在为有经验的开发者提供 C++11/14/17/20 新特性的快速参考。内容涵盖语言可用性提升、运行时性能改进、新容器的使用、智能指针与内存管理、正则表达式、并发编程,以及对 C++20 的前瞻介绍。

快速掌握 C++11/14/17/20,迈入现代 C++ 编程的大门。

作者: 欧长坤 (Ou Changkun)

致谢: 采用 CC BY-NC-ND 4.0 协议授权,感谢所有 GitHub 贡献者及相关社区支持。

🎯 学习目标

  1. 使用命令行工具识别并验证 C++ 编译环境和目标架构。
  2. 解释 C(C89、C99、C11)与 C++(C++98、C++1x)之间的标准兼容性和重叠历史。
  3. 通过 extern "C" 头文件和多阶段编译工作流实现跨语言功能链接。
  4. 使用 nullptr 解决指针歧义,并利用 constexprif constexpr 实现编译期逻辑。
  5. 使用 autodecltype 和类型别名(using)简化复杂声明,同时通过 overridefinal 确保稳健的面向对象设计。
  6. 利用可变模板、折叠表达式和非类型模板参数推导设计高度泛化的代码。
  7. 使用多种捕获模式(值捕获、引用捕获、表达式捕获和通用捕获)定义和实现 Lambda 表达式。
  8. 使用 std::functionstd::bind 创建灵活的函数包装器和部分函数应用。
  9. 将表达式分类为左值(Lvalues)、纯右值(Prvalues)和将亡值(Xvalues),并应用移动语义优化类资源管理。
  10. 区分 std::array(固定大小、栈分配)和 std::vector(动态大小、堆分配)的内存模型及其适用场景。

🔹 第1课:C++ 历史演进与开发环境

概述: 本课涵盖 C++ 开发环境的技术基础及其与 C 语言的历史关系。详细说明了从 C++98 到 C++1x 的标准如何与 C89 至 C11 的标准重叠,并提供必要的机制(如 extern "C"),以成功编译和链接混合的 C 与 C++ 代码库。

学习成果:

  • 使用命令行工具识别并验证 C++ 编译环境和目标架构。
  • 解释 C(C89、C99、C11)与 C++(C++98、C++1x)之间的标准兼容性和重叠历史。
  • 通过 extern "C" 头文件和多阶段编译工作流实现功能性的跨语言链接。

🔹 第2课:语言可用性:现代语法与模板

概述: 本课探讨从 C++11 到 C++20 的演进过程,聚焦于提升代码清晰度、类型安全性和模板灵活性的改进。学生将掌握现代语法特性,如类型推导、使用 constexpr 的编译期求值,以及包括可变模板和折叠表达式在内的高级模板技术。

学习成果:

  • 使用 nullptr 解决指针歧义,并通过 constexprif constexpr 实现编译期逻辑。
  • 使用 autodecltype 和类型别名(using)简化复杂声明,同时通过 overridefinal 保障稳健的面向对象设计。
  • 利用可变模板、折叠表达式和非类型模板参数推导设计高度泛化的代码。

🔹 第3课:运行时改进:Lambda 与移动语义

概述: 本课介绍现代 C++(C++11/14)中引入的关键运行时增强功能,重点在于函数式编程构造和高效的资源管理。学生将掌握 Lambda 表达式——包括 C++14 的通用和表达式捕获——并深入理解移动语义、值类别(左值/右值)和完美转发的机制,从而在高性能应用中消除不必要的深拷贝。

学习成果:

  • 使用各种捕获模式(值捕获、引用捕获、表达式捕获和通用捕获)定义和实现 Lambda 表达式。
  • 使用 std::functionstd::bind 创建灵活的函数包装器和部分函数应用。
  • 将表达式分类为左值(Lvalues)、纯右值(Prvalues)和将亡值(Xvalues),并应用移动语义优化类资源管理。

🔹 第4课:现代容器:std::array

概述: 本课介绍 std::array,这是 C++11 引入的一种现代替代传统 C 风格数组的容器。它探讨了固定大小容器的优势,该容器封装原始数组的同时提供更安全、兼容 STL 的接口以及基于栈的内存分配。

学习成果:

  • 区分 std::array(固定大小、栈分配)和 std::vector(动态大小、堆分配)的内存模型及其适用场景。
  • 正确地使用成员函数如 .size().empty() 初始化和管理 std::array
  • std::array 对象应用标准模板库(STL)算法和范围循环。

🔹 第5课:智能指针与 RAII 内存管理

概述: 本课介绍资源获取即初始化(RAII)作为现代 C++ 内存管理的基础理念。它涵盖从手动指针处理到使用 std::unique_ptr(独占所有权)、std::shared_ptr(引用计数共享)和 std::weak_ptr(打破循环依赖)进行自动化管理的转变。

学习成果:

  • 理解并应用 RAII 原则,确保资源在作用域结束时被释放。
  • 使用 std::shared_ptrstd::unique_ptr 实现共享和独占所有权模型。
  • 通过 std::weak_ptr 识别并解决由循环引用导致的内存泄漏问题。

🔹 第6课:正则表达式与字符串解析

概述: 本课介绍使用 C++11 标准库(std::regex)实现正则表达式,并将其应用于解析 HTTP 请求的实际场景。学生将学习正则表达式量词的语法、std::smatch 的结果捕获用法,以及这些工具在基于模板的 Web 服务器架构中的集成方式。

学习成果:

  • 识别并应用正则表达式特殊字符(量词)来定义字符串模式。
  • 使用 std::regexstd::smatch 验证文件名并从字符串中提取数据。
  • 使用现代 C++ 内存模型和容器实现核心服务器逻辑,包括 HTTP 请求解析和资源映射。

🔹 第7课:并行性、并发性与内存模型

概述: 本课介绍 C++11 向标准化多线程模型的根本性转变。从基本的线程管理与基于 RAII 的锁机制,过渡到高级同步原语,如未来(futures)和条件变量,最终深入严谨的 C++11 内存模型、原子操作和内存一致性保证。

学习成果:

  • 使用 std::threadstd::mutex 以及 RAII 包装器(std::lock_guardstd::unique_lock)管理线程生命周期并保护共享资源。
  • 使用 std::futurestd::packaged_taskstd::condition_variable 实现异步工作流和线程通信。
  • 应用 std::atomic 类型并选择适当的 std::memory_order 策略,以确保内存可见性并防止非法指令重排序。

🔹 第8课:标准库:文件系统更新

概述: 本课探讨 C++ 标准库的演进,重点关注 C++11 及后续标准引入的高级功能。强调从平台特定或低级实现向标准化、高级实用工具(如 std::filesystem)和并发工具的转变。

学习成果:

  • 识别在 C++11 中添加到标准库的关键并发组件。
  • 认识到 std::filesystem 是现代路径和文件管理的重大新增功能。
  • 理解高层抽象在现代化 C++ 开发中的作用。

🔹 第9课:其他现代特性

概述: 本课涵盖 C++11 引入并经后续标准完善的一系列重要特性,以提升类型安全性、性能和代码可读性。学生将学习 long long int 类型、使用 noexcept 的异常规范、增强的字符串和用户自定义字面量,以及通过 alignofalignas 实现细粒度内存对齐控制。

学习成果:

  • 识别并实现 long long int 类型以获得扩展的整数精度。
  • 使用 noexcept 修饰符优化异常处理,并使用 noexcept 运算符查询函数的安全性。
  • 使用原始字符串字面量简化复杂字符串定义,并创建用户自定义字面量以支持自定义类型后缀。

🔹 第10课:C++20:语言的未来

概述: 本课介绍 C++20 的“四大支柱”:概念(Concepts)、模块(Modules)、协程(Coroutines)和范围(Ranges)。这些特性代表自 C++11 以来语言最重大的演进,专注于提升模板安全性、编译效率、异步编程能力以及函数式风格的数据处理。

学习成果:

  • 识别并描述 C++20 标准引入的四项主要特性。
  • 解释概念(Concepts)与约束(Constraints)在改善模板错误处理和设计方面的作用。
  • 区分传统的头文件式方法与新的模块系统。