网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | C++之美:代码简洁、安全又跑得快的30个要诀 |
分类 | 教育考试-考试-计算机类 |
作者 | (英)J.GuyDavidson(J.盖伊·戴维森),(加)KateGregory(凯特·格雷戈里) |
出版社 | 电子工业出版社 |
下载 | ![]() |
简介 | 内容推荐 本书从《C++核心准则》(C++ Core Guidelines)中精心挑选了 30 条准则进行细致、深入的讲解。内容涵盖C++语言最主要的方面,如类型系统、面向对象、模板和元编程、错误处理、程序性能、常量性等,其间又恰如其分地穿插了编码风格、设计模式等主题。书中汇集了作者数十年职业生涯的经验和一些有趣的示例,除了深刻的见解,行文也充满了趣味性。作者试图通过这种突出重点、以点带面的方式帮助读者了解并学习《C++核心准则》,进而更深入地掌握 C++这门编程语言,特别是它的"现代”形态。本书适合各种经验水平的 C++开发者阅读。 目录 第1章 避重就轻不可取\t1 1.1 P.2:使用ISO标准C++编写代码\t2 什么是ISO标准C++\t2 封装差异\t4 了解以前的用法\t8 紧跟标准的发展\t9 1.2 F.51:在有选择的情况下,优先使用默认参数而非重载\t12 引言\t12 改进抽象概念:是增加参数还是重载\t13 微妙的重载解决\t14 回到示例代码\t16 默认参数天然的明确性\t18 函数重载的替代方案\t19 有时必须重载\t19 小结\t20 1.3 C.45:不要定义仅初始化数据成员的默认构造函数,而应使用类内成员 ?初始化\t21 为什么要有默认构造函数\t21 你是怎样初始化数据成员的\t22 两个人维护一个类时会怎样\t25 小结\t27 1.4 C.131:避免平凡的get和set函数\t28 一种古老的惯用法\t28 抽象\t29 单纯的封装\t31 类不变式\t34 名词和动词\t36 小结\t37 1.5 ES.10:每条语句只声明一个名字\t38 我来引入你\t38 向后兼容\t40 写出更加清晰的声明\t42 结构式绑定\t43 小结\t44 1.6 NR.2:不强求函数只用一条return语句\t45 规则会演化\t45 确保资源得到清理\t47 使用RAII\t50 编写好的函数\t52 小结\t54 第2章 不要伤害自己\t55 2.1 P.11:将凌乱的构造封装起来,而不是使其散布于代码中\t56 “一口吞”式做法\t56 封装一种凌乱的构造意味着什么\t58 语言的目的和抽象的本质\t60 抽象的层次\t63 通过重构和分割实现抽象\t64 小结\t65 2.2 I.23:尽量减少函数参数\t66 他们应该挣多少\t66 通过抽象简化问题\t68 尽可能少,但不要更少\t70 现实例子\t72 小结\t73 2.3 I.26:使用C风格子集获取跨编译器的ABI\t74 创建程序库\t74 什么是ABI\t75 最小的C风格子集\t77 异常的传播\t79 小结\t80 2.4 C.47:按声明的顺序定义并初始化成员变量\t82 小结\t90 2.5 CP.3:尽量减少可写数据的显式共享\t91 传统执行模型\t91 等等,不止这些\t93 避免死锁和数据竞争\t95 抛开锁和互斥体\t97 小结\t100 2.6 T.120:只在真正需要时使用模板元编程\t101 std::enable_if => requires\t108 小结\t112 第3章 别再使用\t113 3.1 I.11:切勿通过原生指针(T*)或引用(T&)转移所有权\t114 使用自由存储区\t114 智能指针的性能成本\t117 使用未修饰的引用语义\t118 gsl::owner\t119 小结\t121 3.2 I.3:避免使用单例\t122 全局对象是不好的\t122 单例设计模式\t123 静态初始化顺序的尴尬\t123 如何隐藏一个单例\t125 但它就该只有一份\t127 等一下……\t128 小结\t130 3.3 C.90:使用构造函数和赋值运算符,而不是memset和memcpy\t131 追求很优性能\t131 构造函数的巨大开销\t132 最简单的类\t133 C++标准到底在说什么\t135 那么,memcpy呢\t137 永远不要低估编译器\t139 小结\t140 3.4 ES.50:不要用强制转换去除const限定符\t141 故事时间\t141 处理更大的数据量\t142 const防火墙\t143 实现双接口\t144 缓存和懒惰求值\t146 两种类型的const\t147 const惊奇篇\t149 小结\t150 3.5 E.28:避免基于全局状态(如errno)的错误处理\t151 错误处理很难\t151 C和errno\t151 返回错误代码\t153 异常\t154 <system_error>\t154 Boost.Outcome\t155 错误处理为何这样难\t156 隧道尽头的光\t158 小结\t159 3.6 SF.7:不要在头文件的全局作用域写using namespace\t160 不要这样做\t160 消除歧义\t161 使用using\t162 符号去了哪里\t163 一个更加隐蔽的问题\t166 解决作用域解析运算符的杂乱问题\t168 诱惑与堕落\t169 小结\t169 第4章 正确使用新特性\t171 4.1 F.21:优先选择结构体或元组返回多个“输出”值\t172 函数签名的形式\t172 文档和注解\t173 现在可以返回对象了\t174 也可以返回元组\t177 使用非const引用传递和返回\t179 小结\t182 4.2 Enum.3:优先选择class枚举而不是“普通”枚举\t183 常量\t183 作用域枚举\t185 基础类型\t187 隐式转换\t188 小结\t190 后记\t190 4.3 ES.5:保持作用域短小\t191 作用域的性质\t191 块作用域\t192 名字空间作用域\t193 类作用域\t196 函数参数作用域\t198 枚举作用域\t199 模板参数作用域\t200 作用域作为上下文\t201 小结\t202 4.4 Con.5:使用constexpr表示编译时可以计算的值\t203 从const到constexpr\t203 默认的C++\t205 使用constexpr\t206 inline\t210 constevel\t211 constinit\t212 小结\t213 4.5 T.1:使用模板提高代码的抽象层次\t214 故事时间\t214 提高抽象的层次\t216 函数模板和抽象\t218 类模板和抽象\t220 命名很难\t222 小结\t223 4.6 T.10:为所有模板参数指定概念\t224 来龙去脉\t224 约束你的参数\t226 如何抽象你的概念\t229 通过概念分解\t232 小结\t233 第5章 默认写出好代码\t234 5.1 P.4:在理想情况下,程序应具有静态类型安全性\t235 类型安全是C++的一项安全特性\t235 联合体\t237 类型转换\t238 无符号数\t241 缓冲区和大小\t244 小结\t245 5.2 P.10:优先选择不可变数据而不是可变数据\t246 错误的默认设置\t246 函数声明中的常量性\t248 小结\t252 5.3 I.30:封装违反规则的部分\t253 隐藏生活中不悦目的东西\t253 保全体面\t255 小结\t260 5.4 ES.22:初始值确定后再声明变量\t261 表达式和语句的重要性\t261 C风格的声明\t262 先声明后初始化\t263 尽可能推迟的声明\t264 上下文特定功能的局部化\t266 消除状态\t268 小结\t270 5.5 Per.7:为促成优化而设计\t271 帧率优选化\t271 离硬件更远之后\t273 通过抽象进行优化\t276 小结\t278 5.6 E.6:使用RAII防止泄漏\t279 确定性析构\t279 文件泄漏\t281 为什么要做这些\t284 似乎还是有点儿多:未来的可能性\t286 从哪里获得这些工具\t289 后记\t291 跋\t293 【C++核心准则精选】 P.2:使用ISO标准C++编写代码(1.1节)[ 可以在GitHub或者GitHub Pages上找到C++ Core Guidelines,查看详细内容。] P.4:在理想情况下,程序应具有静态类型安全性(5.1节) P.10:优先选择不可变数据而不是可变数据(5.2节) P.11:将凌乱的构造封装起来,而不是使其散布于代码中(2.1节) I.3:避免使用单例(3.2节) I.11:切勿通过原生指针(T*)或引用(T&)转移所有权(3.1节) I.23:尽量减少函数参数(2.2节) I.26:使用C风格子集获取跨编译器的ABI(2.3节) I.30:封装违反规则的部分(5.3节) F.21:优先选择结构体或元组返回多个“输出”值(4.1节) F.51:在有选择的情况下,优先使用默认参数而非重载(1.2节) C.45:不要定义仅初始化数据成员的默认构造函数,而应该使用类内成员初始化(1.3节) C.47:按声明的顺序定义并初始化成员变量(2.4节) C.90:使用构造函数和赋值运算符,而不是memset和memcpy(3.3节) C.131:避免平凡的get和set函数(1.4节) Enum.3:优先选择class枚举而不是“普通”枚举(4.2节) ES.5:保持作用域短小(4.3节) ES.10:每条语句只声明一个名字(1.5节) ES.22:初始值确定后再声明变量(5.4节) ES.50:不要用强制转换去除const限定符(3.4节) Per.7:为促成优化而设计(5.5节) CP.3:尽量减少可写数据的显式共享(2.5节) E.6:使用RAII防止泄漏(5.6节) E.28:避免基于全局状态(如errno)的错误处理(3.5节) Con.5:使用constexpr表示编译时可以计算的值(4.4节) T.1:使用模板提高代码的抽象层次(4.5节) T.10:为所有模板参数指定概念(4.6节) T120:只在真正需要时使用模板元编程(2.6节) SF.7:不要在头文件的全局作用域写using namespace(3.6节) NR.2:不强求函数只用一条return语句(1.6节) |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。