《A Tour of C++》第二版:Bjarne Stroustrup的C++速览
核心概述
本书由C++语言创始人Bjarne Stroustrup亲笔撰写,是C++编程经典系列的重要组成部分。第二版(2018年)面向C++17标准,为有经验的程序员提供现代C++的全面速览。
书中明确说明:这不是一本” mastery “教材,而是一次”观光游览”——像游览哥本哈根或纽约一样,快速了解主要景点、背景故事和下一步建议。真正掌握C++需要更深入的学习和实践。
全书结构(16章)
Part 1: 基础 (The Basics)
- 程序结构、Hello World、函数
- 类型、变量、算术运算
- 作用域与生命周期
- 常量、指针、数组、引用
- 类型转换、硬件映射
Part 2: 用户定义类型 (User-Defined Types)
- 结构体(Structures)
- 类(Classes)
- 联合(Unions)
- 枚举(Enumerations)
Part 3: 模块化 (Modularity)
- 分离编译
- 模块(Modules,C++20)
- 命名空间(Namespaces)
- 错误处理
Part 4: 类详解 (Classes)
- 具体类型 vs 抽象类型
- 虚函数(Virtual Functions)
- 类层次结构(Class Hierarchies)
Part 5: 基本操作 (Essential Operations)
- 拷贝与移动(Copy and Move)
- 资源管理
- 常规操作(构造/析构/赋值)
Part 6: 模板 (Templates)
- 参数化类型与操作
- 模板机制
- 模板编译模型
Part 7: 概念与泛型编程 (Concepts and Generic Programming)
- C++20 Concepts
- 泛型编程思想
Part 8: 标准库概览 (Library Overview)
- 标准库组件
- 头文件与命名空间
Part 9: 字符串与正则表达式
- std::string
- std::string_view
- std::regex
Part 10: 输入输出
- 流操作(<< / >>)
- I/O状态
- 格式化
- 文件流、字符串流
- C风格I/O
- 文件系统(C++17)
Part 11: 容器
- vector、list、map、unordered_map
- 容器概览
Part 12: 算法
- 迭代器类型与使用
- 流迭代器
- 谓词
- 算法概览
- 并行算法(C++17)
Part 13: 工具类
- 资源管理(智能指针等)
- span(C++20)
- 专用容器
- 分配器
- 时间处理
- 函数适配
- 类型函数
Part 14: 数值计算
- 数学函数
- 数值算法
- 复数
- 随机数
- 向量算术
- 数值限制
Part 15: 并发 (Concurrency)
- 任务与线程(tasks & threads)
- 参数传递与结果返回
- 数据共享
- 事件等待
- 任务间通信
Part 16: 历史与兼容性
- C++发展历史
- 特性演化
- C/C++兼容性
关键知识点
1. C++的核心设计理念
- 零开销原则:你不用的东西就不该付出代价
- 抽象与封装:通过类、模板实现抽象
- 泛型编程:通过模板实现代码复用
- 面向对象:通过类层次实现多态
2. 现代C++的关键特性(C++11/14/17)
- auto类型推导:
auto x = 42; - nullptr:替代NULL
- 智能指针:
std::unique_ptr,std::shared_ptr - 移动语义:
std::move, 右值引用 - lambda表达式:
[](int x){ return x*2; } - std::string_view:避免不必要的字符串拷贝
- std::span:C++20的数组视图
- 并行算法:C++17的
std::execution::par - 模块:C++20的替代
#include机制
3. 资源管理
- RAII(Resource Acquisition Is Initialization)模式
- 拷贝控制:拷贝构造、拷贝赋值、移动构造、移动赋值
- 规则之五(Rule of Five):自定义析构函数时,需要定义所有五个特殊成员函数
4. 迭代器协议
- 输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器
- 算法与容器的解耦:算法操作迭代器,不直接操作容器
5. 并发模型
std::thread:创建线程std::async/std::future:异步任务std::mutex/std::lock_guard:互斥锁std::atomic:原子操作
与其他C++书籍的关系
| 书籍 | 定位 | 关系 |
|---|---|---|
| 《The C++ Programming Language》(TC++PL) | 完整参考书 | 本书是TC++PL的精简版 |
| 《Effective C++》 | 55条最佳实践 | 互补:Tour讲”是什么”,Effective讲”怎么做” |
| 《Effective Modern C++》 | C++11/14现代特性 | 本书覆盖范围更广(到C++17) |
| 《C++ Core Guidelines》 | 官方编码规范 | 本书的Advice部分来源于此 |
行动点
- 快速通读:本书可在几小时内读完,适合建立C++全景认知
- 对照实践:书中每章末有Advice,结合《C++ Core Guidelines》深入阅读
- 重点关注:
- 第16章(历史)了解C++演进脉络
- 第15章(并发)现代C++并发编程基础
- 第8-14章(标准库)常用组件速查
- 延伸阅读:
- 深入某个主题时参考《TC++PL》
- 学习最佳实践时参考《Effective C++》系列
笔记关联
- Effective-Modern-C++-Scott-Meyers — C++11/14现代特性详解
- Cpp-Coding-Standards-101条编码规范 — 编码规范
- Functional-Programming-in-C++ — C++函数式编程
- From-Mathematics-to-Generic-Programming — 泛型编程思想