C++学习指南
1. Scott Meyers的《Effective STL》,Effective系列(如《Effective C++》)基本上是C++圣经了,这一本是其中专门讲STL的,看了可以少踩很多坑。其中某个条款要解决的问题哪怕你目前很难懂,照做都是好的。
2. 侯捷老师的《STL源码剖析》,真正要想掌握一个东西,只能看源码,所谓源码面前,了无秘密。STL里最精妙的容器和算法还有traits,大师给你娓娓道来。虽然SGI STL有点老了,但是思想是一脉相承的。通过大师给你提纲挈领,你将学会怎么入手去阅读STL源码,将来你可以自己去阅读最新的STL实现。书中尤其是那句“我的确认为 99.99 % 的程序员所写的程序,在 SGI STL 面前都是三流水平”,我等小学生看了根本把持不住好嘛。
3.如果《STL源码剖析》中没来得及提到的,可以自行阅读完整SGI STL实现Download STL source code,不过应该尽量去看你正在用的编译器自带的STL实现。
4. 如果还有不懂的,去查阅cppreference和ISO IEC 14882,这里是一切的最终解释。
- C++11/14 简介
- 概述
- 教程目录
- 被弃用的特性
- 与 C 的兼容性
- 语言可用性的强化
- nullptr 与 constexpr
- 类型推导
- auto
- decltype
- 尾返回类型、auto 与 decltype 配合
- 区间迭代
- 基于范围的 for 循环
- 初始化列表
- std::initializer_list
- 统一初始化语法
- 模板增强
- 外部模板
- 尖括号 >
- 类型别名模板
- 变长参数模板
- 面向对象增强
- 委托构造
- 继承构造
- 显式虚函数重载
- override
- final
- 显式禁用默认函数
- 强类型枚举
- 语言运行期的强化
- lambda 表达式
- lambda 表达式基础
- 值捕获
- 引用捕获
- 隐式捕获
- 表达式捕获
- 泛型 lambda
- lambda 表达式基础
- 函数对象包装器
- std::function
- std::bind/std::placeholder
- 右值引用
- 左值、右值的纯右值、将亡值、右值
- 右值引用和左值引用
- 移动语义
- 完美转发
- lambda 表达式
- 对标准库的扩充: 新增容器
- std::array
- std::forward_list
- std::unordered_set
- std::unordered_map
- std::tuple
- 基本操作
- 运行期索引
- 合并与迭代
- 对标准库的扩充: 智能指针和引用计数
- 引用计数
- std::shared_ptr
- std::make_shared
- std::unique_ptr
- std::weak_ptr
- 对标准库的扩充: 正则表达式库
- 正则表达式简介
- 普通字符
- 特殊字符
- 限定符
- std::regex 及其相关
- std::regex
- std::regex_match
- std::match_results
- 正则表达式简介
- 对标准库的扩充: 语言级线程支持
- std::thread
- std::mutex
- std::unique_lock
- std::future
- std::packaged_task
- std::condition_variable
- C++14: std::shared_lock
- C++17: std::scoped_lock
- 其他杂项
- 新类型
- long long int
- noexcept 的修饰和操作
- 字面量
- 原始字符串字面量
- 自定义字面量
- 新类型
- 扩展主题: C++17 简介??
- 主要入选特性
- 非类型模板参数的 auto
- std::variant<>
- 结构化绑定(Structured bindings)
- 变量声明的强化
- 未入选特性
- Concepts
- 主要入选特性