展开全部

主编推荐语

深入解析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日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。