您好,欢迎光临有路网!
C++ Templates(第2版)中文版
QQ咨询:
有路璐璐:

C++ Templates(第2版)中文版

  • 作者:(美) 戴维·范德沃德(David Vandevoorde) (德) 尼古拉 M
  • 出版社:人民邮电出版社
  • ISBN:9787115601513
  • 出版日期:2024年01月01日
  • 页数:384
  • 定价:¥149.80
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    本书是一本全面介绍C 模板技术的图书,主要内容涵盖C 模板的基础概念、语言细节、编程技巧、**应用以及实用示例等。本书针对C 11、C 14、C 17标准进行了内容更新,并对很多新语言特性(包括变量模板、泛型lambda、类模板参数推导等)给出详细解释。通过阅读本书,读者可以深入理解C 模板技术,掌握开发有效、简洁且易维护的软件的原因、时机和方法。 本书内容丰富,架构清晰,讲解翔实,适合对C 模板技术感兴趣的开发人员或爱好者阅读。
    目录
    第 一部分 基础知识 第 1章 函数模板 2 1.1 函数模板初探 2 1.1.1 定义模板 2 1.1.2 使用模板 3 1.1.3 两阶段编译 4 1.2 模板实参推导简介 5 1.3 多模板参数 7 1.3.1 返回类型的模板参数 7 1.3.2 推导返回类型 8 1.3.3 返回类型为公共类型 9 1.4 默认模板实参简介 10 1.5 重载函数模板简介 11 1.6 难道,我们不应该…… 16 1.6.1 传值还是传引用 16 1.6.2 为什么不使用inline 16 1.6.3 为什么不使用constexpr 16 1.7 小结 17 第 2章 类模板 18 2.1 类模板Stack的实现 18 2.1.1 类模板的声明 19 2.1.2 成员函数的实现 20 2.2 类模板Stack的使用 21 2.3 部分使用类模板 22 2.4 友元简介 24 2.5 类模板的特化 25 2.6 偏��化 26 2.7 默认类模板实参 28 2.8 类型别名 30 2.9 类模板实参推导 32 2.10 模板化聚合体 35 2.11 小结 35 第3章 非类型模板参数 36 3.1 非类型的类模板参数 36 3.2 非类型的函数模板参数 38 3.3 非类型模板参数的限制 39 3.4 模板参数类型auto 40 3.5 小结 43 第4章 变参模板 44 4.1 变参模板简介 44 4.1.1 变参模板示例 44 4.1.2 变参和非变参模板的重载 45 4.1.3 sizeof...运算符 46 4.2 折叠表达式 46 4.3 变参模板应用 48 4.4 变参类模板和变参表达式 49 4.4.1 变参表达式 49 4.4.2 变参索引 50 4.4.3 变参类模板 51 4.4.4 变参推导指引 52 4.4.5 变参基类和using关键字 52 4.5 小结 54 第5章 基本技巧 55 5.1 关键字typename 55 5.2 零初始化 56 5.3 使用this-> 58 5.4 处理原始数组和字符串字面量的模板 58 5.5 成员模板 60 5.5.1 .template构造 65 5.5.2 泛型lambda和成员模板 65 5.6 变量模板 66 5.7 模板的模板参数简介 68 5.8 小结 73 第6章 移动语义和enable_if 74 6.1 **转发简介 74 6.2 特殊成员函数模板 77 6.3 通过std::enable_if禁用 模板 79 6.4 使用enable_if 81 6.5 使用概念简化enable_if 表达式 84 6.6 小结 85 第7章 传值还是传引用 86 7.1 传值 86 7.2 传引用 88 7.2.1 传递常量引用 88 7.2.2 传递非常量引用 90 7.2.3 传递转发引用 91 7.3 使用std::ref()和std::cref() 92 7.4 处理字符串字面量和原始 数组 94 7.5 处理返回值 95 7.6 **的模板参数声明方法 97 7.7 小结 99 第8章 编译期编程 100 8.1 模板元编程 100 8.2 使用constexpr计算 102 8.3 偏特化的执行路径选择 103 8.4 SFINAE 104 8.5 编译期if简介 108 8.6 小结 110 第9章 在实践中使用模板 111 9.1 包含模型简介 111 9.1.1 链接器错误 111 9.1.2 头文件中的模板 112 9.2 模板和inline 113 9.3 预编译头文件 114 9.4 破译大篇错误信息 115 9.5 后记 122 9.6 小结 122 第 10章 模板基本术语 123 10.1 是“类模板”还是 “模板类” 123 10.2 替换、实例化和特化 123 10.3 声明和定义 124 10.4 单一定义规则 126 10.5 模板实参和模板形参 126 10.6 小结 127 第 11章 泛型库 128 11.1 可调用对象 128 11.1.1 函数对象的支持 128 11.1.2 处理成员函数及额外的 参数 130 11.1.3 封装函数调用 132 11.2 实现泛型库的其他工具 133 11.2.1 类型特征 133 11.2.2 std::addressof() 135 11.2.3 std::declval() 135 11.3 **转发临时变量 136 11.4 作为模板参数的引用 137 11.5 推迟估算 140 11.6 关于泛型库的思考 141 11.7 小结 141 第二部分 深入模板 第 12章 深入模板基础 144 12.1 参数化的声明 144 12.1.1 虚成员函数 148 12.1.2 模板的链接 148 12.1.3 主模板 150 12.2 模板参数 150 12.2.1 类型参数 150 12.2.2 非类型参数 151 12.2.3 模板的模板参数 152 12.2.4 模板参数包 153 12.2.5 默认模板实参 154 12.3 模板实参 156 12.3.1 函数模板实参 156 12.3.2 类型实参 158 12.3.3 非类型模板实参 158 12.3.4 模板的模板实参 160 12.3.5 实参的等价性 162 12.4 变参模板 163 12.4.1 包扩展 163 12.4.2 包扩展的时机 164 12.4.3 函数参数包 166 12.4.4 多重和嵌套包扩展 167 12.4.5 零长度包扩展 168 12.4.6 折叠表达式 169 12.5 友元 170 12.5.1 类模板的友元类 170 12.5.2 类模板的友元函数 171 12.5.3 友元模板 173 12.6 后记 174 第 13章 模板中的名称 175 13.1 名称的分类 175 13.2 名称查找 177 13.2.1 依赖于参数的查找 178 13.2.2 依赖于参数的友元 声明的查找 179 13.2.3 注入的类名称 180 13.2.4 当前的实例化 181 13.3 解析模板 183 13.3.1 非模板中的上下文 相关性 183 13.3.2 依赖类型的名称 186 13.3.3 依赖模板的名称 188 13.3.4 using声明中的依赖型 名称 189 13.3.5 ADL和显式模板实参 190 13.3.6 依赖型表达式 190 13.3.7 编译器错误 192 13.4 继承和类模板 193 13.4.1 非依赖型基类 193 13.4.2 依赖型基类 194 13.5 后记 196 第 14章 实例化 198 14.1 按需实例化 198 14.2 延迟实例化 200 14.2.1 部分和完全实例化 200 14.2.2 实例化组件 200 14.3 C 的实例化模型 203 14.3.1 两阶段查找 203 14.3.2 实例化点 204 14.3.3 包含模型 207 14.4 实现方案 207 14.4.1 贪婪实例化 209 14.4.2 查询实例化 210 14.4.3 迭代实例化 211 14.5 显式实例化 212 14.5.1 手动实例化 212 14.5.2 显式实例化声明 214 14.6 编译期的if语句 215 14.7 标准库 216 14.8 后记 217 第 15章 模板实参推导 218 15.1 推导的过程 218 15.2 推导的上下文 220 15.3 特殊的推导情况 221 15.4 初始化列表 222 15.5 参数包 223 15.6 右值引用 225 15.6.1 引用折叠规则 225 15.6.2 转发引用 226 15.6.3 **转发 227 15.6.4 推导的意外情况 229 15.7 SFINAE 230 15.8 推导的限制 233 15.8.1 可行的实参转换 233 15.8.2 类模板实参 234 15.8.3 默认调用实参 234 15.8.4 异常规范 235 15.9 显式函数模板参数 236 15.10 基于初始化器和表达式的 推导 238 15.10.1 auto类型的规范 238 15.10.2 使用decltype表示一个表达式的类型 242 15.10.3 decltype(auto) 244 15.10.4 auto推导的特殊 情况 246 15.10.5 结构化绑定 249 15.10.6 泛型lambda表达式 252 15.11 别名模板 254 15.12 类模板参数推导 255 15.12.1 推导指引 256 15.12.2 隐式推导指引 257 15.12.3 其他 259 15.13 后记 262 第 16章 特化与重载 264 16.1 当“泛型代码”不是特别适用的时候 264 16.1.1 透明自定义 265 16.1.2 语义的透明性 266 16.2 重载函数模板 267 16.2.1 签名 267 16.2.2 重载的函数模板的局部排序 269 16.2.3 正式的排序规则 270 16.2.4 模板和非模板 272 16.2.5 变参函数模板 274 16.3 显式特化 276 16.3.1 全局的类模板特化 276 16.3.2 全局的函数模板特化 279 16.3.3 全局的变量模板特化 281 16.3.4 全局的成员特化 281 16.4 类模板偏特化 284 16.5 变量模板偏特化 287 16.6 后记 287 第 17章 未来方向 289 17.1 宽松的typename规则 289 17.2 广义非类型模板参数 290 17.3 函数模板的偏特化 292 17.4 命名模板实参简介 293 17.5 重载类模板 294 17.6 中间包扩展的演绎 294 17.7 void的规则化 295 17.8 模板的类型检查 296 17.9 反射元编程 297 17.10 包管理工具 298 17.11 模块 299 第三部分 模板与设计 第 18章 模板的多态 302 18.1 动多态 302 18.2 静多态 304 18.3 动多态与静多态 306 18.4 使用概念 308 18.5 新形式的设计模式 309 18.6 泛型程序设计 310 18.7 后记 312 第 19章 特征的实现 314 19.1 一个实例:累加一个序列 314 19.1.1 固定特征 314 19.1.2 值特征 317 19.1.3 参数化特征 321 19.2 特征、policy及policy类 321 19.2.1 特征和policy的区别 323 19.2.2 成员模板和模板的模板 参数 324 19.2.3 组合多个policy和(或)特征 325 19.2.4 运用普通的迭代器进行累积 325 19.3 类型函数 326 19.3.1 元素类型 327 19.3.2 转换特征 329 19.3.3 谓词特征 334 19.3.4 结果类型特征 336 19.4 基于SFINAE的特征 339 19.4.1 SFINAE函数重载 339 19.4.2 SFINAE偏特化 342 19.4.3 为SFINAE使用泛型lambda表达式 343 19.4.4 SFINAE友好的特征 346 19.5 IsConvertibleT 349 19.6 检测成员 351 19.6.1 检测成员类型 351 19.6.2 检测任意的成员类型 353 19.6.3 检测nontype成员 354 19.6.4 使用泛型lambda检测 成员 357 19.7 其他特征技术 359 19.7.1 if-then-else 359 19.7.2 检测nonthrowing 操作 362 19.7.3 特征的便利性 364 19.8 类型分类 366 19.8.1 确定基本类型 366 19.8.2 确定复合类型 368 19.8.3 识别函数类型 371 19.8.4 确定类类型 372 19.8.5 确定枚举类型 373 19.9 policy特征 373 19.10 在标准库中 376 19.11 后记 377 第 20章 类型属性重载 379 20.1 算法特化 379 20.2 标签调度 380 20.3 启用/禁用函数模板 382 20.3.1 提供多种特化 383 20.3.2 EnableIf去往何处 385 20.3.3 编译期if 386 20.3.4 术语 387 20.4 类特化 388 20.4.1 启用/禁用类模板 388 20.4.2 类模板的标签调度 390 20.5 实例化**模板 392 20.6 在标准库中 396 20.7 后记 396 第 21章 模板与继承 398 21.1 空基类优化 398 21.1.1 布局原则 398 21.1.2 作为基类的成员 400 21.2 奇妙递归模板模式 402 21.2.1 Barton-Nackman 技巧 404 21.2.2 运算符实现 406 21.2.3 门面模式 407 21.3 混入 413 21.3.1 奇妙的混入 415 21.3.2 参数化的虚拟性 415 21.4 命名模板实参 416 21.5 后记 419 第 22章 桥接静多态与动多态 421 22.1 函数对象、指针以及std::function 421 22.2 泛化的函数指针 423 22.3 桥接接口 425 22.4 类型擦除 426 22.5 可选的桥接 427 22.6 性能考虑 429 22.7 后记 429 第 23章 元编程 431 23.1 现代C 元编程的状况 431 23.1.1 值元编程 431 23.1.2 类型元编程 432 23.1.3 混合元编程 433 23.1.4 单位类型的混合元编程 435 23.2 反射元编程的维度 437 23.3 递归实例化的代价 438 23.4 计算完备性 441 23.5 递归实例化还是递归模板实参 441 23.6 枚举值还是静态常量 442 23.7 后记 443 第 24章 类型列表 446 24.1 解剖一个类型列表 446 24.2 类型列表算法 448 24.2.1 索引 448 24.2.2 寻找*佳匹配 449 24.2.3 追加元素到类型 列表 451 24.2.4 反转类型列表 453 24.2.5 转化类型列表 454 24.2.6 累加类型列表 455 24.2.7 插入排序 457 24.3 非类型类型列表 459 24.4 使用包扩展来优化算法 462 24.5 cons风格的类型列表 463 24.6 后记 465 第 25章 元组 466 25.1 基础元组设计 466 25.1.1 存储 466 25.1.2 构造 468 25.2 基础元组运算 469 25.2.1 比较 469 25.2.2 输出 470 25.3 元组算法 471 25.3.1 作为类型列表 471 25.3.2 增删 472 25.3.3 反转 473 25.3.4 索引列表 474 25.3.5 用索引列表反转 475 25.3.6 重排和选择 477 25.4 展开元组 480 25.5 优化元组 480 25.5.1 元组和EBCO 481 25.5.2 常数时间复杂度的get() 484 25.6 元组索引 485 25.7 后记 487 第 26章 可辨识联合体 489 26.1 存储简介 490 26.2 设计 491 26.3 值的查询与提取 494 26.4 元素初始化、赋值和析构 495 26.4.1 初始化 495 26.4.2 析构 496 26.4.3 赋值 497 26.5 访问者 500 26.5.1 访问结果类型 503 26.5.2 公共结果类型 504 26.6 variant的初始化和赋值 505 26.7 后记 508 第 27章 表达式模板 510 27.1 临时变量和割裂的循环 510 27.2 在模板实参中对表达式编码 514 27.2.1 表达式模板的操作数 515 27.2.2 Array类型 518 27.2.3 运算符 520 27.2.4 回顾 521 27.2.5 表达式模板赋值 523 27.3 表达式模板的性能与局限 524 27.4 后记 524 第 28章 调试模板 527 28.1 浅层实例化 527 28.2 静态断言 529 28.3 原型 530 28.4 追踪器 532 28.5 预言机 535 28.6 后记 536 附录A 单一定义规则 537 A.1 编译单元 537 A.2 声明和定义 538 A.3 单一定义规则的细节 539 A.3.1 程序中的单一定义约束 539 A.3.2 编译单元中的单一定义约束 540 A.3.3 跨编译单元的等价性约束 542 附录B 值类别 545 B.1 传统的左值和右值 545 B.2 C 11值类别 546 B.3 使用decltype检查值类别 549 B.4 引用类型 549 附录C 重载解析 551 C.1 何时应用重载解析 551 C.2 简化过的重载解析 552 C.2.1 成员函数的隐含实参 554 C.2.2 精细**匹配 555 C.3 重载的细节 556 C.3.1 非模板优先或更特化的模板 557 C.3.2 转换序列 557 C.3.3 指针的转型 558 C.3.4 初始化列表 559 C.3.5 仿函数和代理函数 562 C.3.6 其他的重载情况 562 附录D 标准库类型实用程序 564 D.1 使用类型特征 564 D.1.1 std::integral_constant和std::bool_constant 565 D.1.2 使用特征时应该知道的事 566 D.2 基本和复合类型类别 567 D.2.1 基本类型类别的测试 567 D.2.2 复合类型类别的测试 571 D.3 类型属性和操作 572 D.3.1 其他类型属性 572 D.3.2 特定操作测试 580 D.3.3 类型之间的关系 587 D.4 类型构造 589 D.5 其他特征 593 D.6 组合类型特征 595 D.7 其他工具 596 附录E 概念 598 E.1 使用概念 598 E.2 定义概念 600 E.3 约束的重载 602 E.3.1 约束的归并 602 E.3.2 约束和标签调度 603 E.4 概念小提示 604 E.4.1 测试概念 604 E.4.2 概念粒度 604 E.4.3 二进制兼容性 605 术语表 607

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外