目录第 1 章 绪论................................................... 11.1 C 简史 ............................................... 11.1.1 与 C 语言的关系............................ 11.1.2 C 的优点..................................... 11.1.3 C 标准的发展历程 ...................... 21.1.4 哪些人使用 C 程序 ..................... 21.2 编写 C 应用程序................................ 21.2.1 生成可执行文件的步骤.................. 21.2.2 分析并修复错误............................. 21.2.3 集成开发环境 ................................ 31.2.4 编写第一个 C 应用程序.............. 31.2.5 生成并执行第一个 C 应用程序 ... 41.2.6 理解编译错误 ................................ 51.3 C 新增的功能..................................... 51.4 总结...................................................... 51.5 问与答 .................................................. 61.6 作业...................................................... 61.6.1 测验............................................... 61.6.2 练习............................................... 6第 2 章 C 程序的组成部分.......................... 82.1 Hello World 程序的组成部分 ................. 82.1.1 预处理器编译指令#include............. 92.1.2 程序的主体—main( ) .................. 92.1.3 返回值......................................... 102.2 名称空间的概念.................................. 102.3 C 代码中的注释................................112.4 C 函数 ............................................. 122.5 使用 std::cin 和 std::cout 执行基本输入输出操作............................................. 142.6 总结.................................................... 152.7 问与答 ................................................ 152.8 作业.................................................... 152.8.1 测验............................................. 162.8.2 练习............................................. 16第 3 章 使用变量和常量............................... 173.1 什么是变量......................................... 173.1.1 内存和寻址概述........................... 173.1.2 声明变量以访问和使用内存......... 173.1.3 声明并初始化多个类型相同的变量 ............................................. 193.1.4 理解变量的作用域 ....................... 193.1.5 全局变量...................................... 203.1.6 命名约定...................................... 223.2 编译器支持的常见 C 变量类型......... 223.2.1 使用 bool 变量存储布尔值............ 233.2.2 使用 char 变量存储字符 ............... 233.2.3 有符号整数和无符号整数的概念 ............................................. 243.2.4 有符号整型 short、int、long 和long long....................................... 243.2.5 无符号整型 unsigned short、unsignedint、unsigned long 和 unsigned longlong .............................................. 253.2.6 选择正确的数据类型以免发生溢出错误...................................... 253.2.7 浮点类型 float 和 double ............... 263.3 使用 sizeof 确定变量的长度................. 263.4 使用 auto 自动推断类型....................... 283.5 使用 typedef 替换变量类型.................. 293.6 什么是常量 ......................................... 303.6.1 字面常量...................................... 303.6.2 使用 const 将变量声明为常量....... 303.6.3 使用 constexpr 定义常量表达式.... 313.6.4 枚举............................................. 323.6.5 使用#define 定义常量................... 343.7 不能用作常量或变量名的关键字......... 343.8 总结 .................................................... 353.9 问与答................................................. 363.10 作业 .................................................. 373.10.1 测验 ........................................... 373.10.2 练习 ........................................... 37第 4 章 管理数组和字符串............................ 384.1 什么是数组 ......................................... 384.1.1 为何需要数组............................... 384.1.2 声明和初始化静态数组 ................ 394.1.3 数组中的数据是如何存储的......... 39 2 目录4.1.4 访问存储在数组中的数据 ............ 404.1.5 修改存储在数组中的数据 ............ 414.2 多维数组............................................. 434.2.1 声明和初始化多维数组................ 444.2.2 访问多维数组中的元素................ 444.3 动态数组............................................. 454.4 C 风格字符串...................................... 464.5 C 字符串:使用 std::string................ 484.6 总结.................................................... 504.7 问与答 ................................................ 504.8 作业.................................................... 504.8.1 测验............................................. 514.8.2 练习............................................. 51第 5 章 使用表达式、语句和运算符............. 525.1 语句.................................................... 525.2 复合语句(语句块)........................... 535.3 使用运算符......................................... 535.3.1 赋值运算符(=)....................... 535.3.2 理解左值和右值........................... 535.3.3 加法运算符( )、减法运算符(−)、乘法运算符(*)、除法运算符(/)和求模运算符(%)........................ 535.3.4 递增运算符( )和递减运算符(−−)........................................... 545.3.5 前缀还是后缀 .............................. 555.3.6 相等运算符(==)和不等运算符(!=) ........................................... 565.3.7 关系运算符.................................. 565.3.8 逻辑运算 NOT、AND、OR 和XOR ............................................ 585.3.9 使用 C 逻辑运算 NOT(!)、AND(&&)和 OR(||)....................... 595.3.10 按位运算符 NOT(~)、AND(&)、OR(|)和 XOR(^) ................ 635.3.11 按位右移运算符(>>)和左移运算符(<<)............................ 645.3.12 复合赋值运算符......................... 655.3.13 使用运算符 sizeof 确定变量占用的内存量.................................... 675.3.14 运算符优先级 ............................ 685.4 总结.................................................... 695.5 问与答 ................................................ 695.6 作业.................................................... 705.6.1 测验............................................. 705.6.2 练习............................................. 70第 6 章 控制程序流程................................... 716.1 使用 if…else 有条件地执行 ................. 716.1.1 使用 if…else 进行条件编程 .......... 726.1.2 有条件地执行多条语句 ................ 736.1.3 嵌套 if 语句.................................. 746.1.4 使用 switch-case 进行条件处理..... 776.1.5 使用运算符?:进行条件处理.......... 806.2 在循环中执行代码............................... 816.2.1 不成熟的 goto 循环 ...................... 816.2.2 while 循环 .................................... 836.2.3 do…while 循环............................. 846.2.4 for 循环........................................ 866.2.5 基于范围的 for 循环..................... 886.3 使用 continue 和 break 修改循环的行为 .................................................... 906.3.1 不结束的循环—无限循环......... 906.3.2 控制无限循环............................... 916.4 编写嵌套循环...................................... 936.4.1 使用嵌套循环遍历多维数组......... 946.4.2 使用嵌套循环计算斐波纳契数列 ............................................. 956.5 总结 .................................................... 966.6 问与答................................................. 966.7 作业 .................................................... 976.7.1 测验............................................. 976.7.2 练习............................................. 97第 7 章 使用函数组织代码............................ 997.1 为何需要函数...................................... 997.1.1 函数原型是什么......................... 1007.1.2 函数定义是什么......................... 1017.1.3 函数调用和实参是什么 .............. 1017.1.4 编写接受多个参数的函数........... 1017.1.5 编写没有参数和返回值的函数 ... 1037.1.6 带默认值的函数参数.................. 1037.1.7 递归函数—调用自己的函数 ... 1057.1.8 包含多条 return 语句的函数 ....... 1067.2 使用函数处理不同类型的数据........... 1077.2.1 函数重载.................................... 1077.2.2 将数组传递给函数 ..................... 1097.2.3 按引用传递参数......................... 1107.3 微处理器如何处理函数调用 ...............1117.3.1 内联函数.................................... 1127.3.2 自动推断返回类型 ..................... 1137.3.3 lambda 函数................................ 1147.4 总结 .................................................. 115 目录 37.5 问与答 ...............................................1167.6 作业...................................................1167.6.1 测验............................................1167.6.2 练习............................................116第 8 章 阐述指针和引用..............................1188.1 什么是指针........................................1188.1.1 声明指针 ....................................1198.1.2 使用引用运算符(&)获取变量的地址............................................1198.1.3 使用指针存储地址......................1208.1.4 使用解除引用运算符(*)访问指向的数据.................................1228.1.5 将 sizeof( )用于指针的结果 .........1248.2 动态内存分配 ....................................1258.2.1 使用 new 和 delete 动态地分配和释放内存.....................................1258.2.2 将递增和递减运算符( 和−−)用于指针的结果..........................1278.2.3 将关键字 const 用于指针.............1298.2.4 将指针传递给函数......................1308.2.5 数组和指针的类似之处...............1318.3 使用指针时常犯的编程错误...............1338.3.1 内存泄露 ....................................1338.3.2 指针指向无效的内存单元 ...........1338.3.3 悬浮指针(也叫迷途或失控指针) ........................................1348.3.4 检查使用 new 发出的分配请求是否得到满足.....................................1358.4 指针编程最佳实践 .............................1378.5 引用是什么........................................1378.5.1 是什么让引用很有用 ..................1388.5.2 将关键字 const 用于引用.............1398.5.3 按引用向函数传递参数...............1408.6 总结...................................................1408.7 问与答 ...............................................1418.8 作业...................................................1428.8.1 测验............................................1428.8.2 练习............................................142第 9 章 类和对象.........................................1449.1 类和对象............................................1449.1.1 声明类........................................1459.1.2 作为类实例的对象......................1459.1.3 使用句点运算符访问成员 ...........1469.1.4 使用指针运算符(->)访问成员.1469.2 关键字 public 和 private ..................... 1479.3 构造函数........................................... 1509.3.1 声明和实现构造函数.................. 1509.3.2 何时及如何使用构造函数........... 1519.3.3 重载构造函数............................. 1529.3.4 没有默认构造函数的类 .............. 1549.3.5 带默认值的构造函数参数........... 1559.3.6 包含初始化列表的构造函数....... 1569.4 析构函数........................................... 1579.4.1 声明和实现析构函数.................. 1579.4.2 何时及如何使用析构函数........... 1589.5 复制构造函数.................................... 1609.5.1 浅复制及其存在的问题 .............. 1609.5.2 使用复制构造函数确保深复制 ... 1629.5.3 有助于改善性能的移动构造函数 ........................................... 1669.6 构造函数和析构函数的其他用途....... 1669.6.1 不允许复制的类......................... 1679.6.2 只能有一个实例的单例类........... 1679.6.3 禁止在栈中实例化的类 .............. 1699.6.4 使用构造函数进行类型转换....... 1719.7 this 指针 ............................................ 1729.8 将 sizeof( )用于类 .............................. 1739.9 结构不同于类的地方......................... 1759.10 声明友元 ......................................... 1769.11 共用体:一种特殊的数据存储机制 ................................................. 1789.11.1 声明共用体............................... 1789.11.2 在什么情况下使用共用体......... 1789.12 对类和结构使用聚合初始化 ............ 1809.13 总结 ................................................ 1839.14 问与答............................................. 1839.15 作业 ................................................ 1849.15.1 测验 ......................................... 1849.15.2 练习 ......................................... 184第 10 章 实现继承...................................... 18510.1 继承基础 ......................................... 18510.1.1 继承和派生 .............................. 18610.1.2 C 派生语法............................ 18610.1.3 访问限定符 protected ................ 18810.1.4 基类初始化—向基类传递参数 ......................................... 19010.1.5 在派生类中覆盖基类的方法 ..... 19210.1.6 调用基类中被覆盖的方法......... 19410.1.7 在派生类中调用基类的方法 ..... 194 4 目录10.1.8 在派生类中隐藏基类的方法......19610.1.9 构造顺序...................................19810.1.10 析构顺序.................................19810.2 私有继承..........................................20010.3 保护继承..........................................20210.4 切除问题..........................................20510.5 多继承 .............................................20510.6 使用 final 禁止继承 ..........................20710.7 总结.................................................20810.8 问与答 .............................................20810.9 作业.................................................20810.9.1 测验..........................................20810.9.2 练习..........................................209第 11 章 多态..............................................21011.1 多态基础..........................................21011.1.1 为何需要多态行为 ....................21011.1.2 使用虚函数实现多态行为..........21211.1.3 为何需要虚构造函数.................21311.1.4 虚函数的工作原理—理解虚函数表...................................21711.1.5 抽象基类和纯虚函数.................22011.2 使用虚继承解决菱形问题.................22211.3 表明覆盖意图的限定符 override .......22511.4 使用 final 来禁止覆盖函数................22611.5 可将复制构造函数声明为虚函数吗 ..22711.6 总结 .................................................23011.7 问与答..............................................23011.8 作业 .................................................23111.8.1 测验..........................................23111.8.2 练习..........................................231第 12 章 运算符类型与运算符重载 .............23212.1 C 运算符.......................................23212.2 单目运算符 ......................................23312.2.1 单目运算符的类型 ....................23312.2.2 单目递增与单目递减运算符......23412.2.3 转换运算符...............................23612.2.4 解除引用运算符(*)和成员选择运算符(->)............................23812.3 双目运算符 ......................................23912.3.1 双目运算符的类型 ....................24012.3.2 双目加法与双目减法运算符......24012.3.3 实现运算符 =与−= ...................24212.3.4 重载等于运算符(==)和不等运算符(!=)...................................24312.3.5 重载运算符<、>、<=和>= ....... 24512.3.6 重载复制赋值运算符(=)....... 24812.3.7 下标运算符 .............................. 25012.4 函数运算符 operator() ...................... 25312.5 用于高性能编程的移动构造函数和移动赋值运算符 ................................ 25412.5.1 不必要的复制带来的问题......... 25412.5.2 声明移动构造函数和移动赋值运算符...................................... 25412.6 用户定义的字面量........................... 25812.7 不能重载的运算符........................... 26012.8 总结 ................................................ 26112.9 问与答............................................. 26112.10 作业............................................... 26112.10.1 测验 ....................................... 26112.10.2 练习 ....................................... 261第 13 章 类型转换运算符 ........................... 26213.1 为何需要类型转换........................... 26213.2 为何有些 C 程序员不喜欢 C 风格类型转换 .......................................... 26313.3 C 类型转换运算符........................ 26313.3.1 使用 static_cast ......................... 26313.3.2 使用 dynamic_cast 和运行阶段类型识别.................................. 26413.3.3 使用 reinterpret_cast.................. 26713.3.4 使用 const_cast ......................... 26713.4 C 类型转换运算符存在的问题...... 26813.5 总结 ................................................ 26913.6 问与答............................................. 26913.7 作业 ................................................ 27013.7.1 测验 ......................................... 27013.7.2 练习 ......................................... 270第 14 章 宏和模板简介............................... 27114.1 预处理器与编译器........................... 27114.2 使用#define 定义常量 ...................... 27114.3 使用#define 编写宏函数................... 27414.3.1 为什么要使用括号.................... 27614.3.2 使用 assert 宏验证表达式.......... 27614.3.3 使用宏函数的优点和缺点......... 27714.4 模板简介 ......................................... 27814.4.1 模板声明语法........................... 27814.4.2 各种类型的模板声明................ 27914.4.3 模板函数.................................. 27914.4.4 模板与类型安全 ....................... 281 目录 514.4.5 模板类 ......................................28114.4.6 声明包含多个参数的模板 .........28214.4.7 声明包含默认参数的模板 .........28314.4.8 一个模板示例 ...........................28314.4.9 模板的实例化和具体化.............28414.4.10 模板类和静态成员 ..................28614.4.11 参数数量可变的模板...............28714.4.12 使用 static_assert 执行编译阶段检查 ........................................29014.4.13 在实际 C 编程中使用模板....29014.5 总结.................................................29114.6 问与答 .............................................29114.7 作业.................................................29114.7.1 测验..........................................29114.7.2 练习..........................................292第 15 章 标准模板库简介............................29315.1 STL 容器..........................................29315.1.1 顺序容器...................................29315.1.2 关联容器...................................29415.1.3 容器适配器...............................29415.2 STL 迭代器 ......................................29515.3 STL 算法..........................................29515.4 使用迭代器在容器和算法之间交互 ..29515.5 选择正确的容器...............................29715.6 STL 字符串类...................................29815.7 总结.................................................29815.8 问与答 .............................................29915.9 作业.................................................299第 16 章 STL string 类 ................................30016.1 为何需要字符串操作类 ....................30016.2 使用 STL string 类 ............................30116.2.1 实例化和复制 STL string ...........30116.2.2 访问 std::string 的字符内容........30316.2.3 拼接字符串...............................30516.2.4 在 string 中查找字符或子字符串...................................30616.2.5 截短 STL string..........................30716.2.6 字符串反转...............................30916.2.7 字符串的大小写转换.................31016.3 基于模板的 STL string 实现..............31116.4 总结.................................................31216.5 问与答 .............................................31216.6 作业.................................................31316.6.1 测验..........................................31316.6.2 练习 ......................................... 313第 17 章 STL 动态数组类........................... 31417.1 std::vector 的特点............................. 31417.2 典型的 vector 操作........................... 31417.2.1 实例化 vector............................ 31417.2.2 使用 push_back( )在末尾插入元素 ......................................... 31617.2.3 列表初始化 .............................. 31717.2.4 使用 insert( )在指定位置插入元素 ......................................... 31717.2.5 使用数组语法访问 vector 中的元素 ......................................... 31917.2.6 使用指针语法访问 vector 中的元素 ......................................... 32017.2.7 删除 vector 中的元素................ 32117.3 理解大小和容量 .............................. 32217.4 STL deque 类 .................................. 32417.5 总结 ................................................ 32617.6 问与答............................................. 32617.7 作业 ................................................ 32717.7.1 测验 ......................................... 32717.7.2 练习 ......................................... 327第 18 章 STL list 和 forward_list................. 32818.1 std::list 的特点 ................................. 32818.2 基本的 list 操作 ............................... 32818.2.1 实例化 std::list 对象.................. 32818.2.2 在 list 开头或末尾插入元素 ...... 33018.2.3 在 list 中间插入元素................. 33118.2.4 删除 list 中的元素..................... 33318.3 对 list 中的元素进行反转和排序 ...... 33418.3.1 使用 list::reverse( )反转元素的排列顺序.................................. 33418.3.2 对元素进行排序 ....................... 33518.3.3 对包含对象的 list 进行排序以及删除其中的元素 ....................... 33718.3.4 C 11 引入的 std::forward_list .. 34018.4 总结 ................................................ 34118.5 问与答............................................. 34218.6 作业 ................................................ 34218.6.1 测验 ......................................... 34218.6.2 练习 ......................................... 342第 19 章 STL 集合类.................................. 34319.1 简介 ................................................ 343 6 目录19.2 STL set 和 multiset 的基本操作 .........34419.2.1 实例化 std::set 对象...................34419.2.2 在 set 或 multiset 中插入元素.....34519.2.3 在 STL set 或 multiset 中查找元素..........................................34719.2.4 删除 STL set 或 multiset 中的元素..........................................34819.3 使用 STL set 和 multiset 的优缺点.....35219.4 总结.................................................35419.5 问与答 .............................................35519.6 作业.................................................35519.6.1 测验..........................................35519.6.2 练习..........................................355第 20 章 STL 映射类...................................35620.1 STL 映射类简介...............................35620.2 STL map 和 multimap 的基本操作.....35720.2.1 实例化 std::map 和std::multimap .............................35720.2.2 在 STL map 或 multimap 中插入元素..........................................35820.2.3 在 STL map 或 multimap 中查找元素..........................................36120.2.4 在 STL multimap 中查找元素.....36320.2.5 删除 STL map 或 multimap 中的元素..........................................36320.3 提供自定义的排序谓词 ....................36520.4 基于散列表的 STL 键-值对容器 .......36820.4.1 散列表的工作原理 ....................36820.4.2 使用 unordered_map 和 unordered_multimap ...................................36820.5 总结.................................................37220.6 问与答 .............................................37220.7 作业.................................................37220.7.1 测验..........................................37320.7.2 练习..........................................373第 21 章 理解函数对象 ...............................37421.1 函数对象与谓词的概念 ....................37421.2 函数对象的典型用途........................37421.2.1 一元函数...................................37421.2.2 一元谓词...................................37821.2.3 二元函数...................................38021.2.4 二元谓词...................................38121.3 总结.................................................38321.4 问与答 .............................................38421.5 作业 ................................................ 38421.5.1 测验 ......................................... 38421.5.2 练习 ......................................... 384第 22 章 lambda 表达式............................. 38522.1 lambda 表达式是什么....................... 38522.2 如何定义 lambda 表达式.................. 38622.3 一元函数对应的 lambda 表达式 ....... 38622.4 一元谓词对应的 lambda 表达式 ....... 38722.5 通过捕获列表接受状态变量的 lambda表达式.............................................. 38822.6 lambda 表达式的通用语法 ............... 39022.7 二元函数对应的 lambda 表达式 ....... 39122.8 二元谓词对应的 lambda 表达式 ....... 39222.9 总结 ................................................ 39422.10 问与答........................................... 39422.11 作业............................................... 39522.11.1 测验........................................ 39522.11.2 练习........................................ 395第 23 章 STL 算法...................................... 39623.1 什么是 STL 算法 ............................. 39623.2 STL 算法的分类 .............................. 39623.2.1 非变序算法 .............................. 39623.2.2 变序算法.................................. 39723.3 使用 STL 算法................................. 39823.3.1 根据值或条件查找元素 ............ 39823.3.2 计算包含给定值或满足给定条件的元素数...................................... 40023.3.3 在集合中搜索元素或序列......... 40123.3.4 将容器中的元素初始化为指定值...................................... 40323.3.5 使用 std::generate( )将元素设置为运行阶段生成的值.................... 40523.3.6 使用 for_each( )处理指定范围内的元素 ......................................... 40623.3.7 使用 std::transform( )对范围进行变换 ......................................... 40723.3.8 复制和删除操作 ....................... 40923.3.9 替换值以及替换满足给定条件的元素 ......................................... 41223.3.10 排序、在有序集合中搜索以及删除重复元素................................. 41323.3.11 将范围分区............................. 41523.3.12 在有序集合中插入元素........... 41723.4 总结 ................................................ 419 目录 723.5 问与答 .............................................41923.6 作业.................................................41923.6.1 测验..........................................42023.6.2 练习..........................................420第 24 章 自适应容器:栈和队列.................42124.1 栈和队列的行为特征........................42124.1.1 栈 .............................................42124.1.2 队列..........................................42224.2 使用 STL stack 类.............................42224.2.1 实例化 stack ..............................42224.2.2 stack 的成员函数.......................42324.2.3 使用 push( )和 pop( )在栈顶插入和删除元素...................................42424.3 使用 STL queue 类............................42524.3.1 实例化 queue.............................42524.3.2 queue 的成员函数......................42624.3.3 使用 push( )在队尾插入以及使用pop( )从队首删除 ......................42724.4 使用 STL 优先级队列.......................42824.4.1 实例化 priority_queue 类............42824.4.2 priority_queue 的成员函数..........................................42924.4.3 使用 push( )在 priority_queue 末尾插入以及使用 pop( )在 priority_queue开头删除...................................43024.5 总结.................................................43224.6 问与答 .............................................43224.7 作业.................................................43224.7.1 测验..........................................43224.7.2 练习..........................................432第 25 章 使用 STL 位标志...........................43325.1 bitset 类............................................43325.2 使用 std::bitset 及其成员...................43425.2.1 std:bitset 的运算符.....................43425.2.2 std::bitset 的成员方法 ................43525.3 vector<bool>.....................................43725.3.1 实例化 vector<bool>..................43725.3.2 vector<bool>的成员函数和运算符 ......................................43825.4 总结.................................................43925.5 问与答 .............................................43925.6 作业.................................................43925.6.1 测验..........................................43925.6.2 练习..........................................440第 26 章 理解智能指针............................... 44126.1 什么是智能指针 .............................. 44126.1.1 常规(原始)指针存在的问题 ......................................... 44126.1.2 智能指针有何帮助.................... 44226.2 智能指针是如何实现的.................... 44226.3 智能指针类型.................................. 44326.3.1 深复制...................................... 44326.3.2 写时复制机制........................... 44526.3.3 引用计数智能指针.................... 44526.3.4 引用链接智能指针.................... 44526.3.5 破坏性复制 .............................. 44526.3.6 使用 std::unique_ptr................... 44726.4 深受欢迎的智能指针库.................... 44926.5 总结 ................................................ 44926.6 问与答............................................. 44926.7 作业 ................................................ 45026.7.1 测试 ......................................... 45026.7.2 练习 ......................................... 450第 27 章 使用流进行输入和输出 ................ 45127.1 流的概述 ......................................... 45127.2 重要的 C 流类和流对象 ................................................ 45227.3 使用 std::cout 将指定格式的数据写入控制台...................................... 45327.3.1 使用 std::cout 修改数字的显示格式 ......................................... 45327.3.2 使用 std::cout 对齐文本和设置字段宽度.................................. 45527.4 使用 std::cin 进行输入...................... 45527.4.1 使用 std::cin 将输入读取到基本类型变量中 .............................. 45527.4.2 使用 std::cin:get 将输入读取到 char*缓冲区中.................................. 45627.4.3 使用 std::cin 将输入读取到std::string 中.............................. 45727.5 使用 std::fstream 处理文件 ............... 45827.5.1 使用 open( )和 close( )打开和关闭文件 ......................................... 45927.5.2 使用 open( )创建文本文件并使用运算符<<写入文本 ................... 46027.5.3 使用 open( )和运算符>>读取文本文件 ......................................... 46027.5.4 读写二进制文件 ....................... 461 8 目录27.6 使用 std::stringstream 对字符串进行转换 .................................................46327.7 总结.................................................46427.8 问与答 .............................................46427.9 作业.................................................46527.9.1 测验..........................................46527.9.2 练习..........................................465第 28 章 异常处理.......................................46628.1 什么是异常 ......................................46628.2 导致异常的原因...............................46628.3 使用 try 和 catch 捕获异常................46728.3.1 使用 catch(…)处理所有异常 .........................................46728.3.2 捕获特定类型的异常.................46828.3.3 使用 throw 引发特定类型的异常..........................................46928.4 异常处理的工作原理........................47028.4.1 std::exception 类 ........................47228.4.2 从 std::exception 派生出自定义异常类 ......................................47328.5 总结.................................................47428.6 问与答 .............................................47428.7 作业.................................................47528.7.1 测验..........................................47528.7.2 练习..........................................475第 29 章 继续前行.......................................47729.1 当今的处理器有何不同 ....................47729.2 如何更好地利用多个内核.................47829.2.1 线程是什么...............................47829.2.2 为何要编写多线程应用程序..........................................47929.2.3 线程如何交换数据 ....................47929.2.4 使用互斥量和信号量同步线程..........................................48029.2.5 多线程技术带来的问题.............48029.3 编写杰出的 C 代码........................48029.4 C 17 有望引入的新特性 ................48129.4.1 支持在 if 和 switch 中进行初始化...................................... 48129.4.2 保证复制得以避免.................... 48229.4.3 避免内存分配开销的std::string_view ......................... 48229.4.4 类型安全的共用体替代品std::variant ................................ 48329.4.5 使用 if constexpr 有条件地编译代码 ......................................... 48329.4.6 改进的 lambda 表达式 .............. 48429.4.7 在构造函数中使用类型自动推断功能 ......................................... 48429.5 更深入地学习 C ........................... 48429.5.1 在线文档.................................. 48529.5.2 提供指南和帮助的社区 ............ 48529.6 总结 ................................................ 48529.7 问与答............................................. 48529.8 作业 ................................................ 485附录 A 二进制和十六进制.......................... 486A.1 十进制.............................................. 486A.2 二进制.............................................. 486A.2.1 计算机为何使用二进制 ............. 487A.2.2 位和字节................................... 487A.2.3 1KB 相当于多少字节................. 487A.3 十六进制 .......................................... 487A.4 不同进制之间的转换 ........................ 488A.4.1 通用转换步骤............................ 488A.4.2 从十进制转换为二进制 ............. 488A.4.3 从十进制转换为十六进制.......... 489附录 B C 关键字 ..................................... 490附录 C 运算符优先级................................. 491附录 D ASCII 码......................................... 492附录 E 答案................................................ 495
下载21天学通c++(第8版) .pdf用户还喜欢
- 18480 文章数
- 500万+ 热度
作者专栏
编辑推荐
- 淡抹u2引擎,修复内容较多,物有所值
- 界域传说·经典巨作=传世单机(一键安装)
- 丸子版本(175个传世版本大集合)
- GS版本:神话公益服务端+客户端
- 图片放大工具(放大图片不模糊)
- 剪映无限制VIP版
- 传奇世界客户端下载器,史上最全传世客户端
- 传世GS20220920商业引擎注册+登录配置器 解压密码是1
- U2官方排行榜游戏网关 支持元神,支持传家宝
- GS开战传世客户端+服务端
- (淡漠夕阳)u2引擎合区工具
- 传世GS引擎消除“你的游戏客户端版本号过旧,请及时更新”提示
- 传世一机多区双线路配置器--免密码版本
- 传世凤凰登陆器劫持修复软件
- SQLite3 for Navicat
- 传奇世界npc对话框编辑工具
- 传世GS落霞铭文服务器端
- gs_20210409引擎包+注册机(无限制)
- 传奇世界NPC对话封包查看器[支持时长版和极速版]
- 彩虹引擎传世脚本编辑工具1.7版来了,支持函数脚本翻译
评论