A Tour of C++ (第二版) 笔记

原始文件: /books/c++/A Tour of C++.pdf
大小: 12.71MB
页数: 726页
作者: Bjarne Stroustrup (C++之父)
出版: Addison-Wesley, 2018
格式: 混合版PDF(文本+部分扫描页)


核心观点

本书是C++发明者Bjarne Stroustrup撰写的C++17现代编程指南。以”城市观光”为喻,快速带领读者浏览现代C++的全景,适合有经验的程序员快速掌握C++17特性。

关键概念

1. C++演进历程

  • 1979: “C with Classes”诞生
  • 1985: 第一个商业版本发布
  • 1998: ISO C++标准(C++98)
  • 2011: C++11革命性改进
  • 2014: C++14小幅增强
  • 2017: C++17标准发布

2. C++17核心语言特性

  • 值初始化: uniform initialization {}
  • auto推导: 从初始化器自动推导类型
  • 范围for循环: for (auto& x : container)
  • lambda表达式: 内联函数对象
  • move语义: 右值引用 &&,避免不必要的拷贝
  • constexpr: 编译期计算
  • structured bindings: auto [x, y] = pair
  • if/switch初始化: if (auto it = map.find(x); it != end())
  • fold expressions: 可变参数模板简化
  • filesystem库: std::filesystem

3. 标准库组件

  • 容器: vector, list, map, unordered_map, forward_list, deque, set
  • 算法: find, sort, transform, accumulate, reduce
  • 字符串: std::string, std::string_view
  • 正则表达式: <regex>
  • 智能指针: unique_ptr, shared_ptr, weak_ptr
  • 并发: thread, mutex, condition_variable, future, promise, async
  • 数值: complex, random, numeric_limits

4. 并发编程模型(第15章)

  • thread: 直接线程管理
  • packaged_task + future: 任务与结果传递
  • async(): 简化异步任务启动
  • condition_variable: 线程间事件通信
  • memory model: 先行发生关系、synchronizes-with

5. 模板与泛型编程

  • 模板参数化类型: class template
  • 模板参数化操作: function template
  • Concepts (C++20): 约束模板参数
  • Variadic Templates: 可变参数模板
  • 模板编译模型: separate compilation问题

6. 资源管理

  • RAII: Resource Acquisition Is Initialization
  • 智能指针: 替代裸指针
  • noexcept: 异常安全保证
  • Rule of Zero/Three/Five: 特殊成员函数规则

7. 现代C++编程原则

  • 优先使用标准库: 不要重复造轮子
  • 泛型编程: 通过模板实现类型无关代码
  • 零开销原则: 你不用支付的,你不用的
  • 抽象层次: 使用合适抽象级别解决问题
  • 错误处理: 异常 vs error-code选择

可行动点

  1. 新项目: 默认使用C++17,善用std::optional, std::variant, std::string_view
  2. 代码审查: 检查是否正确使用智能指针替代裸指针
  3. 性能优化: 使用std::vector替代数组,利用range-based for
  4. 并发编程: 优先使用std::async和parallel algorithms
  5. 模板设计: 理解concept约束,避免过度特化
  6. 错误处理: 统一异常策略,避免裸指针管理资源
  7. 学习路径: 参考C++ Core Guidelines深入实践

与其他知识关联

重要结论

  1. 现代C++: C++17提供了强大的并发、泛型、资源管理能力
  2. 简洁优先: 使用高层抽象简化代码,避免低级操作
  3. 类型安全: 依赖编译器检查,减少运行时错误
  4. 性能与抽象并存: 零开销抽象是C++的核心哲学
  5. 持续学习: C++标准每3年发布新版本,需保持关注