标签
内容简介
本书是 C++ 模板编程的系统性指南,以“基本概念、常用技巧、实用实例”三条线帮助读者建立扎实的模板知识基础。全书共 22 章,按四部分展开:第一部分以教程风格介绍模板的基本概念,包括函数模板与类模板的写法、模板实参推导、模板参数、默认模板实参与重载;第二部分深入模板的语言细节,讨论名称查找、实例化、特化与偏特化、模板中的继承与依赖名称等容易被忽视的规则;第三部分介绍模板所支持的基本设计技术,如 trait、策略类、CRTP 等惯用法;第四部分把这些技术应用于实际场景,涉及元编程、表达式模板等内容。附录 A 与附录 B 分别整理了“一处定义原则”和重载解析的相关资料,便于案头查阅。作者 David Vandevoorde 与 Nicolai M. Josuttis 均为 C++ 标准委员会成员,书中大量带注释的代码示例既解释“怎么写”,也解释“为什么这样写”、编译器的两阶段查找如何工作。本书内容基于 C++98/03,适合作为理解模板编译模型的底层参考,阅读时需注意与后续标准新增特性的对应关系。
编辑推荐
C++ 模板的难点不在于写出一个 template 关键字,而在于理解编译器如何查找名字、如何实例化、如何推导实参,以及为什么某些看起来合法的代码会突然报出难以阅读的错误。这本书正是围绕这些“看不见的规则”展开:它把模板当作一门语言来讲解,从语法一路走到元编程与表达式模板,并把重载解析、一处定义原则这类日常最容易踩坑的主题放进附录,方便随时翻查。两位作者都是 C++ 标准委员会成员,示例代码配有大量注释,解释的是编译器真实行为,而非简化后的教学模型。第 1 版在中文读者中长期保持高分评价,历经多次重印,是国内 C++ 进阶书单的常客。需要提醒的是,本书内容以 C++98/03 为准,变参模板、泛型 lambda、类模板参数推导等现代特性并未覆盖;读它可以打牢底层认知,再读第 2 版(何荣华等译,2022 年后出版)则能补齐现代 C++ 的拼图。两者配合,是模板学习最稳妥的路径。
适合谁读
适合
- 已掌握 C++ 基本语法,想系统理解模板机制的开发者
- 需要阅读或维护 STL、Boost 等模板库源码的工程师
- 准备编写泛型库、希望减少编译期错误的 C++ 程序员
- 对模板元编程、表达式模板等编译期技术感兴趣的学习者
不适合
- 刚接触编程或尚未熟练使用 C++ 类的零基础读者
- 只想了解 C++11 之后新特性、不关心底层机制的读者
- 主要使用 Java、Python 等不支持模板的语言的开发者
阅读建议
- 先按第 1 部分顺序通读函数模板与类模板两章,并动手复现示例代码。
- 第 2 部分语言细节可当参考手册,遇到实际编译错误时按主题查阅。
- 阅读第 3、4 部分前先熟悉 STL 容器与迭代器,否则 trait 与策略类难以体会。
- 读完后对照第 2 版补读变参模板、类模板参数推导等现代特性章节。
出版社简介
人民邮电出版社
中国 · 成立于 1953 年
人民邮电出版社以科技、计算机与信息通信类图书见长,并由此延伸至摄影、艺术、软件学习与励志成长等门类,形成较为多元的出版方向。库内图书既涵盖《重构与模式(修订版)》《华为交换机学习指南(第二版)》等计算机与通信技术读物,也收录《小王子(中英法彩绘典藏纪念版)》《了不起的盖茨比》《假如给我三天光明》等双语典藏类作品;《北京十年:1980-1990》与《鬼刀 WLOP个人插画作品集》则体现其在摄影与艺术领域的布局。作者资源包括安东尼·圣埃克苏佩里、海伦·凯勒、Joshua Kerievsky、王达、张兆增与WLOP等。
目录
- 第1章 关于本书
- 第1部分 模板基础概念:第2章 函数模板
- 第3章 类模板
- 第4章 非类型模板参数
- 第5章 技巧性基础知识
- 第6章 模板实战
- 第7章 模板术语
- 第2部分 深入模板:第8章 深入模板基础
- 第9章 模板中的名称
- 第10章 实例化
- 第11章 模板实参推导
- 第12章 特化与重载
- 第13章 未来的方向
- 第3部分 模板与设计:第14章 模板中的多态
- 第15章 trait与策略类
- 第16章 模板与继承
- 第17章 元编程
- 第18章 表达式模板
- 第4部分 高级应用:第19章 类型分类
- 第20章 智能指针
- 第21章 tuple
- 第22章 函数对象与仿函数
- 附录A 一处定义原则
- 附录B 重载解析
常见问题
这本书和《C++ Templates(第2版)中文版》有什么区别?
本书基于 C++98/03,共 22 章,由陈伟柱翻译;第 2 版加入了 Douglas Gregor,内容按 C++11/14/17 重写,由何荣华等翻译,删去了过时实现。初学模板底层机制可先读本书,再读第 2 版掌握现代特性。
零基础可以直接读这本书吗?
不建议。书中默认读者熟悉类、继承、运算符重载与编译链接流程,缺少这些基础会使前几章的示例难以理解。建议先读一本 C++ 入门书并写过若干含模板的代码再来。
书中的示例代码能直接编译运行吗?
多数示例针对 C++98/03,用现代编译器(如 GCC、Clang 的 C++17 模式)编译可能出现告警或差异。遇到问题时切换到 -std=c++03 编译选项,并注意书中讨论的部分缺陷在后续标准中已被修正。
读这本书之前需要先读《C++标准库》吗?
不是必须,但会很有帮助。书中用 std::vector、迭代器、函数对象等讨论 trait 与策略类,若熟悉标准库的接口设计,理解设计技术部分会顺畅很多;Josuttis 的《C++标准库》可作为配套读物。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。