互联网
类型
可以朗读
语音朗读
288千字
字数
2019-01-01
发行日期
展开全部
主编推荐语
深入解析C++核心特性,提升开发效率与编程能力。
内容简介
书中聚焦开发者日常高频使用的语言特性,重点讲解惯用法(而非罗列语言里的琐碎细节),展示代码示例及其技术原理,旨在帮助大家又快又好地使用C++。
作者精选了对象生存期与RAII、移动语义、标准模板库(STL)、视图、智能指针、错误处理、并发与异步编程等核心主题,深入浅出地剖析语言特性,并针对实际开发中的常见问题提供解决方案。
本书面向C/C++程序员(特别是遇到困难、希望深入理解并优化C++开发的读者),以及其他需要提升C++编程能力的开发者。
目录
- 版权信息
- 推荐序
- 前言
- 本书特色与目标读者
- 引用和拓展阅读
- 中文术语
- 一些约定
- 致谢
- 绪论
- 为什么要学习 C++
- C++ 的特点
- 有最好的语言吗?
- 如何学习 C++
- 第1章 C 和 C++ 基础
- 1.1 C 基础知识
- 1.1.1 代码组织
- 1.1.2 预处理
- 1.1.3 函数
- 1.1.4 语句和表达式
- 1.1.5 对象和变量
- 1.1.6 基础类型
- 1.1.7 指针
- 1.1.8 枚举
- 1.1.9 数组
- 1.1.10 结构体
- 1.1.11 联合体
- 1.2 C++ 基础知识
- 1.2.1 C++ 是 C 的超集吗?
- 1.2.2 引用
- 1.2.3 重载
- 1.2.4 名空间
- 1.2.5 类
- 1.2.6 面向对象编程
- 1.2.7 运行期类型识别
- 1.2.8 异常
- 1.2.9 模板
- 1.2.10 具名转型
- 1.3 小结
- 第2章 对象生存期和 RAII
- 2.1 C++ 对象的存储期和生存期
- 2.1.1 静态对象的生存期
- 2.1.2 动态对象的生存期
- 2.1.3 自动对象的生存期
- 2.2 RAII 惯用法
- 2.3 小结
- 第3章 值类别和移动语义
- 3.1 引用语义和值语义
- 3.2 值类别
- 3.2.1 左值
- 3.2.2 右值
- 3.3 移动语义
- 3.3.1 提供移动操作的重载
- 3.3.2 移动对代码风格的影响
- 3.3.3 返回值优化
- 3.4 值类别的其他细节
- 3.4.1 右值引用变量的值类别
- 3.4.2 转发引用和完美转发*
- 3.5 三法则、五法则和零法则
- 3.6 小结
- 第4章 模板和自动类型推导
- 4.1 模板概要
- 4.2 函数模板
- 4.2.1 模板的定义
- 4.2.2 模板的实例化
- 4.2.3 模板参数推导和 auto 自动类型推导
- 4.3 类模板
- 4.3.1 模板的定义
- 4.3.2 模板的显式特化
- 4.3.3 类模板的成员函数和类的成员函数模板
- 4.4 变量模板
- 4.5 别名模板
- 4.6 其他类型推导
- 4.6.1 类模板参数推导
- 4.6.2 decltype
- 4.6.3 后置返回类型声明和返回类型自动推导
- 4.6.4 声明变量和初始化的不同方式*
- 4.6.5 结构化绑定
- 4.7 小结
- 第5章 字符串
- 5.1 字符串概述
- 5.2 string 的基本特点
- 5.2.1 类容器特性
- 5.2.2 字符串特性
- 5.3 basic_string 模板
- 5.4 小结
- 第6章 函数对象
- 6.1 什么是函数对象
- 6.1.1 函数对象类
- 6.1.2 高阶函数
- 6.1.3 函数的指针和引用
- 6.2 lambda 表达式
- 6.2.1 基本用法和原理
- 6.2.2 捕获
- 6.2.3 泛型 lambda 表达式
- 6.3 使用 function 对象
- 6.4 小结
- 第7章 标准容器
- 7.1 标准模板库和容器
- 7.2 序列容器
- 7.2.1 vector
- 7.2.2 deque
- 7.2.3 list
- 7.2.4 forward_list
- 7.2.5 array
- 7.3 关联容器
- 7.3.1 排序问题
- 7.3.2 关联容器的特性
- 7.3.3 通透比较器
- 7.4 无序关联容器
- 7.4.1 哈希函数对象
- 7.4.2 无序关联容器的接口
- 7.4.3 无序关联容器的底层细节
- 7.5 容器适配器
- 7.5.1 queue
- 7.5.2 stack
- 7.5.3 priority_queue
- 7.6 性能说明
- 7.7 小结
- 第8章 迭代器
- 8.1 基本概念
- 8.1.1 迭代器的初步示例
- 8.1.2 ostream_range.h 对被输出对象的要求
- 8.2 迭代器的类别
- 8.2.1 迭代器
- 8.2.2 输入迭代器
- 8.2.3 前向迭代器
- 8.2.4 双向迭代器
- 8.2.5 随机访问迭代器
- 8.2.6 连续迭代器
- 8.2.7 输出迭代器
- 8.3 基于范围的 for 循环
- 8.3.1 范围表达式的生存期问题*
- 8.3.2 键-值对容器的遍历
- 8.3.3 哨兵类型*
- 8.4 小结
- 第9章 标准算法
- 9.1 算法概述
- 9.2 一些常用算法
- 9.2.1 映射
- 9.2.2 归约
- 9.2.3 过滤
- 9.2.4 生成
- 9.2.5 复制
- 9.2.6 搜索
- 9.2.7 排序
- 9.2.8 其他
- 9.3 并行算法
- 9.4 C++20 的范围算法*
- 9.5 小结
- 第10章 视图
- 10.1 视图概述
- 10.2 string_view
- 10.2.1 基本用法
- 10.2.2 视图的生存期问题
- 10.2.3 string_view 和 string
- 10.2.4 string_view 的哈希*
- 10.3 span
- 10.3.1 基本用法
- 10.3.2 一些技术细节
- 10.3.3 gsl::span 的性能问题
- 10.4 C++20 里的视图*
- 10.4.1 映射
- 10.4.2 过滤
- 10.4.3 反转
- 10.4.4 取子元素
- 10.4.5 管道和管道的性能
- 10.4.6 其他视图
- 10.5 小结
- 第11章 智能指针
- 11.1 智能指针概述
- 11.2 唯一所有权的智能指针 unique_ptr
- 11.2.1 基本使用场景和示例
- 11.2.2 一些技术细节
- 11.3 共享所有权的智能指针 shared_ptr
- 11.3.1 基本使用场景和示例
- 11.3.2 弱指针 weak_ptr
- 11.3.3 引用计数的性能问题
- 11.4 智能指针的传递方式
- 11.5 删除器的行为定制
- 11.6 小结
- 第12章 现代 C++ 的一些重要改进
- 12.1 类
- 12.1.1 类数据成员的默认初始化
- 12.1.2 override 和 final
- 12.2 静态断言
- 12.3 字面量
- 12.3.1 用户定义字面量
- 12.3.2 二进制字面量
- 12.4 数字分隔符
- 12.5 constexpr 变量和函数*
- 12.5.1 字面类型
- 12.6 枚举类和指定枚举的底层类型
- 12.6.1 byte 类型
- 12.7 多元组 tuple
- 12.7.1 利用 tuple 的快速比较
- 12.8 时间库 chrono
- 12.8.1 C++20 前的 chrono 库
- 12.8.2 C++20 的 chrono 库改进*
- 12.9 随机数库 random
- 12.10 正则表达式库 regex
- 12.11 小结
- 第13章 契约和异常
- 13.1 契约式设计
- 13.1.1 契约式设计的优点、应用场景和实现方式
- 13.1.2 先决条件
- 13.1.3 后置条件
- 13.1.4 不变量
- 13.2 异常
- 13.2.1 不使用异常的 C 风格错误处理
- 13.2.2 使用异常的代码示例
- 13.2.3 如何处理异常
- 13.2.4 不用异常的理由
- 13.2.5 不用异常的后果
- 13.3 小结
- 第14章 optional/variant 和错误处理
- 14.1 不使用异常的错误处理
- 14.2 optional
- 14.3 variant
- 14.3.1 访问 variant
- 14.4 expected
- 14.5 标准错误码
- 14.5.1 文件系统库里面的错误处理
- 14.5.2 集成自定义错误码
- 14.6 返回值优化问题
- 14.7 小结
- 第15章 传递对象的方式
- 15.1 传统的对象传递方式
- 15.2 性能优化的对象传递方式
- 15.2.1 针对移动的优化
- 15.2.2 该不该用值传参?
- 15.2.3 “不可教授”的极致性能传参方式*
- 15.2.4 字符串的特殊处理
- 15.3 小结
- 第16章 并发编程
- 16.1 并发编程概述
- 16.2 线程和锁
- 16.2.1 线程和锁的基本示例
- 16.2.2 thread 的析构问题
- 16.2.3 数据竞争示例
- 16.2.4 锁的更多细节
- 16.3 通知机制
- 16.4 期值
- 16.4.1 async 和 future
- 16.4.2 promise 和 future
- 16.4.3 packaged_task 和 future
- 16.5 内存序和原子量
- 16.5.1 执行顺序问题
- 16.5.2 获得-释放语义
- 16.5.3 atomic
- 16.6 线程局部对象
- 16.7 线程安全的容器?
- 16.7.1 标准容器的线程安全性
- 16.7.2 同步访问的模板工具
- 16.7.3 支持并发访问的容器
- 16.8 小结
- 第17章 异步编程
- 17.1 异步编程的基本概念
- 17.2 Asio
- 17.2.1 异步执行
- 17.2.2 异步回调
- 17.2.3 同步网络程序
- 17.2.4 异步网络程序
- 17.3 C++20 协程
- 17.3.1 使用协程的异步网络程序
- 17.3.2 使用协程的生成器*
- 17.3.3 有栈和无栈协程*
- 17.4 小结
- 第18章 探索 C++ 的工具
- 18.1 编译器
- 18.1.1 主流编译器简介
- 18.1.2 优化选项
- 18.1.3 告警选项
- 18.1.4 编译器的其他重要功能
- 18.1.5 标准库的调试模式
- 18.2 Clang 系列工具
- 18.2.1 Clang-Format
- 18.2.2 Clang-Tidy
- 18.2.3 clangd
- 18.3 运行期检查工具
- 18.3.1 valgrind
- 18.3.2 AddressSanitizer(ASan)
- 18.3.3 UndefinedBehaviorSanitizer(UBSan)
- 18.3.4 ThreadSanitizer(TSan)
- 18.4 Compiler Explorer
- 18.5 小结
- 结束语
- 推荐阅读材料
- C 语言
- STL 和泛型编程
- C++ 标准库
- 并发编程
- 最佳实践
- 历史和演化
- 看完了
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。
