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选择
可行动点
- 新项目: 默认使用C++17,善用std::optional, std::variant, std::string_view
- 代码审查: 检查是否正确使用智能指针替代裸指针
- 性能优化: 使用std::vector替代数组,利用range-based for
- 并发编程: 优先使用std::async和parallel algorithms
- 模板设计: 理解concept约束,避免过度特化
- 错误处理: 统一异常策略,避免裸指针管理资源
- 学习路径: 参考C++ Core Guidelines深入实践
与其他知识关联
重要结论
- 现代C++: C++17提供了强大的并发、泛型、资源管理能力
- 简洁优先: 使用高层抽象简化代码,避免低级操作
- 类型安全: 依赖编译器检查,减少运行时错误
- 性能与抽象并存: 零开销抽象是C++的核心哲学
- 持续学习: C++标准每3年发布新版本,需保持关注