《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部分来源于此

行动点

  1. 快速通读:本书可在几小时内读完,适合建立C++全景认知
  2. 对照实践:书中每章末有Advice,结合《C++ Core Guidelines》深入阅读
  3. 重点关注:
    • 第16章(历史)了解C++演进脉络
    • 第15章(并发)现代C++并发编程基础
    • 第8-14章(标准库)常用组件速查
  4. 延伸阅读:
    • 深入某个主题时参考《TC++PL》
    • 学习最佳实践时参考《Effective C++》系列

笔记关联