标题：EffectiveC++:改善程序与设计的55个具体做法:第3版
图书信息
书名：Effective C++ : 改善程序与设计的55个具体做法：第3版  作者：[美]Scott Meyers（斯考特.梅耶）著    侯捷 译
ISBN：978-7-121-12332-0
出版日期：2011年1月 
定价：定 价：65.00元
宣传语
传承大师智慧  领悟技术本真
经典名著  翻译良品  典藏不二之选
高效的classes、functions、templates和inheritance hierarchies（继承体系）方面的专家级指导。
崭新的“TR1”标准程序库功能应用，以及与既有标准程序库组件的比较。 
洞察C++和其他语言（例如Java、C#、C）之间的不同。此举有助于那些来自其他语言阵营的开发人员消化吸收C++式的各种解法。
作 者 简 介
Scott Meyers是全世界最知名的C++软件开发专家之一。他是畅销书《Effective C++》系列（Effective C++，More Effective C++，Effective STL）的作者，又是创新产品《Effective C++ CD》的设计者和作者，也是Addison-Wesley的“Effective Software Development Series”顾问编辑，以及《Software Development》杂志咨询板成员。他也为若干新公司的技术咨询板提供服务。Meyers于1993年自Brown大学获得计算机博士学位。
译 者 简 介
侯捷是计算机技术书籍的作家、译者、书评人。著有《深入浅出MFC》、《多型与虚拟》、《STL源码剖析》、《无责任书评》三卷，译有众多脍炙人口的高阶技术书籍，包括Meyers所著的“Effective C++”系列。侯捷兼任教职于元智大学、同济大学、南京大学。 内 容 简 介
有人说C++程序员可以分为两类，读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过这本书之后，就获得了迅速提升自己C++功力的一个契机。
在国际上，本书所引起的反响，波及整个计算机技术的出版领域，余音至今未绝。几乎在所有C++书籍的推荐名单上，本书都会位于前三名。作者高超的技术把握力、独特的视角、诙谐轻松的写作风格、独具匠心的内容组织，都受到极大的推崇和仿效。这种奇特的现象，只能解释为人们对这本书衷心的赞美和推崇。
这本书不是读完一遍就可以束之高阁的快餐读物，也不是用以解决手边问题的参考手册，而是需要您去反复阅读体会的，C++是真正程序员的语言，背后有着精深的思想与无以伦比的表达能力，这使得它具有类似宗教般的魅力。希望这本书能够帮您跨越C++的重重险阻，领略高处才有的壮美风光，做一个成功而快乐的C++程序员。
译  序
按孙中山先生的说法，这个世界依聪明才智的先天高下得三种人：先知先觉得发明家，后知后觉得宣传家，不知不觉得实践家。三者之中发明家最少最稀珍，最具创造力。正是匠心独具的发明家创造了这个花花绿绿的计算机世界。
以文字、图书、授课形式来讲解、宣扬、引导技术的人，一般被视为宣传家而非发明家。然而，有一类最高等级的技术作家，不但能将精辟独到的见解诉诸文字，又能创造新的教学形式，引领风骚，对技术的影响和对产业的贡献不亚于技术或开发工具的创造者。这种人当之发明家亦无愧矣。
Scott Meyers就是这一等级的技术作家！
自从1991年出版《Effective C++》之后，Meyers声名大噪。1996年的《More Effective C++》和1997年的《Effective C++》2/e以及2001年的《Effective STL》让他更上高楼。Meyers擅长探索编程语言的极限，穷尽其理，再以一支生花妙笔将复杂的探索过程和前因后果写成环环相扣故事性甚强的文字。他的幽默文风也让读者在高张力的技术学习过程中犹能享受“阅读的乐趣”——这是我对技术作家的最高礼赞。
以条款（items）传递专家经验，这种写作形式是否为Meyers首创我不确定，但的确是他造成了这种形式的计算机书籍写作风潮。影响所及，《Exceptional C++》、《More Exceptional C++》、《C++ Gotchas》、《C++ Coding Standards》、《Effective COM》、《Effective Java》、《Practical Java》纷纷在书名或形式上“向大师致敬”。
睽违8年之后《Effective C++》第三版面世了。我很开心继第二版再次受邀翻译。Meyers在自序中对新版已有介绍，此处不待赘言。在此我适度修改第二版部分译序，援引于下，协助读者迅速认识本书定位。
C++ 是一个难学易用的语言！
C++ 的难学，不仅在其广博的语法，以及语法背后的语义，以及语义背后的深层思维，以及深层思维背后的对象模型；C++ 的难学还在于它提供了四种不同而又相辅相成的编程范型（programming paradigms）：procedural-based, object-based, object-oriented, generics。
世上没有白吃的午餐！又要有效率，又要有弹性，又要前瞻望远，又要回溯相容，又要治大国，又要烹小鲜，学习起来当然就不可能太简单。在庞大复杂的机制下，万千使用者前仆后继的动力是：一旦学成，妙用无穷。
C++ 相关书籍车载斗量，如天上繁星，如过江之鲫。广博如四库全书者有之（The C++ Programming Language、C++ Primer、Thinking in C++），深奥如重山复水者有之（The Annotated C++ Reference Manual, Inside the C++ Object Model），细说历史者有之（The Design and Evolution of C++, Ruminations on C++），独沽一味者有之（Polymorphism in C++），独树一帜者有之（Design Patterns, Large Scale C++ Software Design, C++ FAQs），另辟蹊径者有之（Generic Programming and the STL），程序库大全有之（The C++ Standard Library），专家经验之累积亦有之（Effective C++, More Effective C++）。这其中“专家经验之累积”对已具 C++ 相当基础的程序员有着立竿见影的帮助，其特色是轻薄短小，高密度纳入作者浸淫C++/OOP多年的广泛经验。它们不但开展读者的视野，也为读者提供各种C++/OOP常见问题的解决模型。某些主题虽然在百科型C++ 语言书中也可能提过，但此类书籍以深度探索的方式让我们了解问题背后的成因、最佳解法，以及其他可能的牵扯。这些都是经验的累积和心血的结晶，十分珍贵。
《Effective C++》就是这样一本轻薄短小高密度的“专家经验累积”。
本中译版与英文版页页对译，保留索引，偶尔加上小量译注；愿能提供您一个愉快的学习。千里之行始于足下，祝愿您从声名崇隆的本书展开一段新里程。同时，我也向您推荐本书之兄弟《More Effective C++》，那是Meyers的另一本同样盛名远播的书籍。
侯捷  2006/02/15于台湾新竹
英中简繁术语对照
这里列出本书出现之编程术语的英中对照。本中文版在海峡两岸同步发行，因此我也列出本书简繁两版的术语对照，方便某些读者从中一窥两岸计算机用语。
表中带有 * 者表示本书对该词条大多直接采用英文术语。中英术语的选择系由以下众多考虑中取其平衡：
业界和学界习惯。即便是学生读者，终也要离开学校进入职场；熟悉业界和学界的习惯用语（许多为英文），避免二次转换，很有必要。
这是一本中文版，需顾及中文阅读的感觉和顺畅性。过多保留英文术语会造成版面的破碎与杂乱！然若适度保留英文术语，可避免某些望之不似术语的中文出现于字里行间造成阅读的困扰和停顿，有助于流畅的思考和留下深刻印象。
凡涉及C++ 语言关键字之相关术语皆保留。例如class, struct, template, public, private, protected, static, inline, const, namespace ……
以上术语可能衍生复合术语，例如与class相关的复合术语有base class, derived class, super class, subclass, class template …… 此类复合术语如果不长，尽皆保留原文；若太长则视情况另作处理（也许中英并陈，也许赋予特殊字体）。
凡计算机科学所称之数据结构名称，尽皆保留。例如stack, queue, tree, hashtable, map, set, deque, list, vector, array …… 偶尔将array译为数组。
某些流通但不被我认为足够理想之中译词，保留原文不译。例如reference。
某些英文术语被我刻意以特殊字体表现并保留，例如pass by reference、pass by value、copy构造函数、assignment操作符、placement new。
少量术语为顾及词性平衡，时而采用中文（如指针、类型）时而采用英文（如pointer、type）。
索引之于科技书籍非常重要。本书与英文版页页对译，因此原封不动保留所有英文索引。
过去以来我一直不甚满意object和type两个术语的中译词：“对象”和“类型”，认为它们缺乏术语突出性（前者正确性甚至有待商榷），却又频繁出现影响阅读，因此常在我的著作或译作中保留其英文词或偶尔采用繁体版术语：“物件”和“型别”。但现在我想，既然大家已经很习惯这两个中文术语，也许我只是杞人忧天。因此本书采用大陆读者普遍习惯的译法。不过我仍要提醒您，"object" 在Object Oriented技术中的真正意义是“物体、物件”而非“对象、目标”。
以下带有 * 者表示本书对该词条采英文词，不译为中文
英文术语 简体版译词 繁体版译词
abstract              抽象的 抽象的                  
abstraction            抽象性、抽象件 抽象性、抽象件          
access                 访问 存取、取用               
access level           访问级别 存取级别                
access function        访问函数 存取函式               
adapter                 适配器 配接器                
address                 地址 地址                   
address-of operator       取地址操作符 取址运算子             
aggregation           聚合 聚合                  
algorithm             算法 演算法                 
allocate               分配 配置                   
allocator               分配器 配置器                 
application             应用程序 应用程式              
architecture             体系结构 体系结构              
argument               实参 引数                  
*array                  数组 阵列                  
arrow operator          箭头操作符 箭头运算子             
assembly language      汇编语言 组合语言               
*assert(-ion)               断言 断言                    
assign(-ment)            赋值 赋值                     
assignment operator     赋值操作符 赋值运算子               
*base class              基类 基础类别                 
*base type             基类型 基础型别                 
binary search         二分查找 二分搜寻                 
*binary tree             二叉树 二元树                   
binary operator          二元操作符 二元运算子               
binding               绑定 绑定、系结              
*bit                    位 位元                     
*bitwise                （以bit为单元逐一 ……）
block                   区块 区块                    
boolean                布尔值 布林值                  
breakpoint             断点 中断点                  
build                  建置 建置                    
build-in               内置 内建                     
bus                    总线 汇流排                  
*byte                    字节 位元组                  
cache                  高速缓存（区） 快取（区）              
call                   调用 呼叫                    
callback              回调 回呼                     
call operator          call操作符 call运算子              
character              字符 字元                    
*child class              子类 子类别                  
*class                  类 类别                    
*class template           类模板 类别模板                
client                 客户 客户                    
code                代码 程式码                  
compatible            兼容 相容                     
compile time          编译期 编译期                   
compiler               编译器 编译器                   
component             组件 组件                     
composition            复合 复合                     
concrete                具象的 具象的                   
concurrent              并发 并行                   
configuration           配置 组态                   
connection             连接 连接，连线              
constraint               约束（条件） 约束（条件）            
construct              构件 构件                    
container              容器 容器                    
*const                  （C++ 关键字，代表constant）
constant               常量 常数                     
constructor             构造函数 建构式                   
*copy（动词）           拷贝 拷贝、复制               
copy（名词）           复件、副本 复件、副本             
create                 创建 产生、建立、生成        
custom                 定制 订制、自定              
data                   数据 资料                   
database               数据库 资料库                 
data member            成员变量 成员变数                
data structure          数据结构 资料结构               
debug                 调试 除错                    
debugger               调试器 除错器                  
declaration              声明式 宣告式                   
default                缺省 预设                    
definition               定义式 定义式                   
delegate                委托 委托                    
dereference             提领（解参考） 提领                  
*derived class            派生类 衍生类别                
design pattern           设计模式 设计范式                
destroy                销毁 销毁                   
destructor               析构函数 解构式                  
directive               指示符 指令                    
document               文档 文件                    
dynamic binding         动态绑定 动态绑定                
entity                   物体 物体                    
encapsulation            封装 封装                    
*enum(-eration)            枚举 列举                    
equality                 相等 相等                    
equivalence             等价 等价                    
evaluate              核定、核算 核定、核算               
exception             异常 异常                    
explicit               显式 显式、明白的            
expression              表达式 算式                  
file                   文件 档案                    
framework             框架 框架                    
full specialization        全特化 全特化                
function                 函数 函式                      
function object           函数对象 函式物件                
*function template        函数模板 函式模板                 
generic                  泛型、泛化、一般化 泛型、泛化、一般化      
*getter(相对于setter)     取值函数 取值函式                
*global                   全局的 全域的                  
*handle                 句柄 识别号、权柄            
*handler                 处理函数 处理函式                
*hash table               哈希表、散列表 杂凑表                  
header (file)             头文件 表头档                 
*heap                   堆 堆积                     
hierarchy             继承体系(层次结构) 继承体系(阶层体系)      
identifier               标识符 识别字、识别符号         
implement(-ation)       实现 实作                    
implicit               隐喻的、暗自的、隐式 隐喻的、暗自的、隐式    
information           信息 资讯                    
inheritance            继承 继承                    
*inline                 内联 行内                     
initialization list         初值列 初值列                  
initialize                初始化 初始化                 
instance              实体 实体                    
instantiate              具现化、实体化 具现化、实体化          
interface                接口 介面                     
Internet                互联网 网际网路                
interpreter             解释器 直译器                  
invariants             恒常性 恒常性                  
invoke                 调用 唤起                    
iterator               迭代器 迭代器                  
library               程序库 程式库                  
linker                连接器 连结器                  
literal                  字面常量 字面常数                 
*list                    链表 串列                   
load                  装载 载入                   
*local                  局部的 区域的                  
lock                   机锁 机锁                    
loop                    循环 回圈                     
lvalue                 左值 左值                     
macro                 宏 巨集                     
member                 成员 成员                     
member function       成员函数 成员函式               
memory                内存 记忆体                  
memory leak           内存泄漏 记忆体洩漏               
meta-                  元- 超-                     
*meta-programming       元编程 超编程                  
modeling               塑模 模塑                    
module                模块 模组                    
modifier               修饰符 饰词                   
multi-tasking            多任务 多工                    
*namespace              命名空间 命名空间                 
native                 固有的 原生的                   
nested                 嵌套 嵌套、巢状              
object                 对象 物件                     
object based            基于对象的 植基於物件、以物件为基础           
object model           对象模型 物件模型                
object oriented          面向对象 物件导向               
operand                操作数 运算元                  
operating system         操作系统 作业系统                
operator               操作符 运算子                   
overflow               溢出 上限溢位                
overhead               额外开销 额外开销                
overload               重载 重载                    
override              覆写 覆写                    
package              包 套件                    
parallel                并行 平行                    
parameter              参数、形参 参数                    
*parent class             父类 父类别                  
parse                  解析 解析                    
partial specialization      偏特化 偏特化                  
*pass by reference        按址传递 传址                   
*pass by value            按值传递 传值                    
pattern                 模式 范式                    
*placement delete         （某种特殊形式的delete operator）
*placement new          （某种特殊形式的new operator）
pointer               指针 指标                  
polymorphism         多态 多型                  
preprocessor          预处理器 前处理器                
print                  打印 列印                   
printer                打印机 印表机                 
process               进程 行程                  
program              程序 程式                  
programmer             程序员 程式员                   
programming          编程 编程                  
project                项目 专案                    
pseudo code           伪码 伪码                    
quality                 质量 品质                     
*queue                   队列 伫列                     
raw                    原始的、未经处理的 原始的、未经处理的      
recursive               递归 递回                    
refer to                指涉、指称、指向 指涉、指称、指向        
*reference               引用 参考、引用               
regular expression       正则表达式 正则算式                
resolve                 解析 决议                   
return                  返回 回返、传回               
return type              返回类型 回返型别                
return value             返回值 回返值                   
runtime                运行期 执行期                  
rvalue                  右值 右值                    
save                   存储 储存                    
schedule                调度 排程                    
scheduler              调度器 排程器                 
scope                  作用域 作用域                  
search                查找 搜寻                     
semantics               语义 语意                     
*setter(相对于getter)     设值函数 设值函式                
signature               签名（式） 签名（式）              
smart pointer            智能指针 智慧型指标             
specialization           特化 特化                    
source                  源码 源码                    
*stack                   栈 堆叠                    
standard library          标准程序库 标准程式库             
statement               语句 述句                    
*static                  静态的 静态的                  
string                  字符串 字串                     
*subtype                子类型 子型别                   
support                 支持 支援                    
*template               模板 范本                    
temporary object        临时对象 暂时物件                
text                    文本 文字                  
thread                  线程 绪程                   
thread safe             多线程安全 多绪安全               
throw                 抛、掷 抛、掷                 
token                  语汇单元 语汇单元                
type                   类型 型别                    
unary function           单参函数 一元函式                
underflow               下溢 下限溢位               
unqualified             未经资格修饰 未经资格修饰           
user                   用户 用户                   
user interface           用户界面 用户介面                
*value                  值、数值 值、数值                
variable               变量 变数                    
*vector                  矢量 向量                    
virtual function         virtual函数 virtual函式                
virtual machine         虚拟机 虚拟机器
序  言
1991年我写下《Effective C++》第一版。1997年撰写第二版时我更新了许多重要内容，但为了不让熟悉第一版的读者感到困惑，我竭尽所能保留原始结构：原先50个条款中的48个标题基本没变。如果把书籍视为一栋房屋，第二版只是更换地毯灯饰，重新粉刷一遍而已。
到了第三版，修缮工作进一步深入壁骨墙筋（好几次我甚至希望能够翻新地基）。1991年起C++ 世界经历了巨大变革，而本书目标——在一本小而有趣的书中确认最重要的一些C++ 编程准则——却已不再能够由15年前建立的那些条款体现出来。“C++ 程序员拥有C背景”这句话在1991年是个合理假设，如今C++ 程序员却很可能来自Java或C# 阵营。继承（inheritance）和面向对象编程（object-oriented programming）在1991年对大多数程序员都很新鲜，如今程序员已经建立良好概念，异常（exceptions）、模板（templates）和泛型编程（generic programming）才是需要更多引导的领域。1991年没人听过所谓设计模式（design patterns），如今少了它很难讨论软件系统。1991年C++ 正式标准才刚要上路，如今C++ 标准规范已经8岁，新版规范蓄势待发。
为了对付这些改变，我把所有条款抹得一干二净，然后问自己“2005年什么是对C++ 程序员最重要的忠告？”答案便是第三版中的这些条款。本书有两个新章，一个是资源管理（resource management），一个是模板编程（programming with templates）。实际上template（模板）这东西遍布全书，因为它们几乎影响了C++ 的每个角落。本书新素材还包括在exceptions（异常）概念下编程、套用设计模式、
以及运用新的TR1程序库设施（TR1于条款54描述）。本书也告诉大家在单线程系统（single-threaded systems）中运作良好但可能不适用于多线程系统（multithreaded systems）的某些技术和做法。本书半数以上内容是新的。在此同时第二版大部分基础信息仍然很重要，所以我找出一个保留它们的办法：你可以在附录B找到第二、第三两版的条款对应表。
我努力让本书达到我所能够达到的最佳状态，但这并不表示它已臻完美。如果你认为某些条款不适合作为一般性忠告，或你有更好的办法完成本书所谈的某件工作，或书中某些技术讨论不够清楚不够完全，甚或有所误导，请告诉我。如果你找出任何错误——技术上的、文法上的、排版印刷上的，不论哪一种——也请告诉我。我很乐意将第一位提出问题并吸引我注意的朋友加入下次印刷的致谢名单中。
即使本书条款个数扩充为55，这一整组编程准则还谈不上完备。然而毕竟整理出优良准则——几乎任何时间适用于任何应用程序的准则——比想象中困难得多。如果你有其他编程准则的想法或建议，我将乐以与闻。
我手上维护本书第一刷以来的变化清单，其中包括错误修订、进一步说明和技术更新。这份清单放在网址为的"Effective C++ Errata" 网页上。如果你希望在这份清单更新时获得通知，请加入我的邮件列表。这份列表用来发布消息给可能对我的专业工作感兴趣的人士，详情请见。
Scott Douglas Meyers Stafford.Oregon
April 2005
致  谢
《Effective C++》已经面世15年了，我开始学习C++ 则是在书写此书的前5年。也就是说 "Effective C++项目" 已经发展两个年代了。此期间我得益于数百（数千？）人的深刻知识、对我的建议与修正，以及偶发的一些目瞪口呆的事绩。这些人帮助我更加完善《Effective C++》，我要对他们全体表示感谢。
我已经放弃追踪“在哪儿学到什么”的历史，但永远记得有个公众信息来源不断带给我帮助：Usenet C++ newsgroups，特别是comp.lang.c++.moderated和comp.std.c++。本书许多——也许是大多数——条款得益于这些讨论群所突出的若干技术想法和后续调查与诊疗。
关于第三版新内容，Steve Dewhurst和我一起讨论了最初的条款名单。条款11中关于“藉由copy-and-swap实现operator=”的构想来自Herb Sutter在此主题的作品，像是《Exceptional C++》（Addison-Wesley, 2000）条款13。RAII（见条款13）源自Bjarne Stroustrup的《The C++ Programming Language》（Addison-Wesley, 2000）。条款17背后的想法来自Boost shared_ptr网页上的“Best Practices”节区又得到Herb Sutter的《More Exceptional C++》（Addison-Wesley, 2002）条款21的琢磨。条款29强烈受到Herb Sutter在此主题上的广泛作品的影响，像是《Exceptional C++》条款8~19，《More Exceptional C++》条款17~23，以及《Exceptional C++ Style》（Addison-Wesley, 2005）条款11~13；David Abrahams帮助我更好地了解三个异常安全性保证。条款35的NVI 手法来自Herb Sutter写于《C/C++ Users Journal》2001年9月份的 "Virtuality" 专栏。同一条款中的Template Method和Strategy设计模式来自《Design Patterns》（Addison-Wesley, 1995），作者是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides。条款37所说的NVI使用手法，概念来自Hendrik Schober。David Smallberg 给了我动机在条款38写出一个定制型set 实现品。条款39提到EBO通常只在多重继承中才可用，这个构想源自David Vandevoorde和 Nicolai M. Josuttis合著的《C++ Templates》（Addison-Wesley, 2003）。条款42中我对typename的最初理解来自Greg Comeau主持的 "C++ and C FAQLeor Zolman则帮助我认知我的最初了解并不正确（是我的错，和Greg无关）。条款46的本质源自于Dan Sak的谈话，"Making New Friends"。条款52末尾的那个想法“如果你声明一版operator new，你也应该声明其对应的delete伙伴”源自Herb Sutter的《Exceptional C++ Style》条款22。我从David Abrahams身上更多了解了Boost的检评过程（条款55有一份摘要）。
上面所说关于我向谁或从某处学习某一技术，并不必然表示谁或某处就是该技术的发明人或发表处。
我的笔记还告诉我，我也使用了来自Steve Clamage, Antoine Trux, Timothy Knox和Mike Kaelbling的信息，可惜这份笔记没有提到如何以及在哪儿学到什么。
第一版草稿由Tom Cargill, Glenn Carroll, Tony Davis, Brian Kernighan, Jak Kirman, Doug Lea, Moises Lejter, Eugene Santos, Jr., John Shewchuk, John Stasko, Bjarne Stroustrup, Barbara Tilly和Nancy L. Urbano共同检阅。我收到了一些改善建议并纳入后来刷次，这些建议来自Nancy L. Urbano, Chris Treichel, David Corbin, Paul Gibson, Steve Vinoski, Tom Cargill, Neil Rhodes, David Bern, Russ Williams, Robert Brazile, Doug Morgan, Uwe Steinmüller, Mark Somer, Doug Moore, David Smallberg, Seth Meltzer, Oleg Shteynbuk, David Papurt, Tony Hansen, Peter McCluskey, Stefan Kuhlins, David Braunegg, Paul Chisholm, Adam Zell, Clovis Tondo, Mike Kaelbling, Natraj Kini, Lars Nyman, Greg Lutz, Tim Johnson, John Lakos, Roger Scott, Scott Frohman, Alan Rooks, Robert Poor, Eric Nagler, Antoine Trux, Cade Roux, Chandrika Gokul, Randy Mangoba和Glenn Teitelbaum。
第二版草稿由以下人士共同检阅：Derek Bosch, Tim Johnson, Brian Kernighan, Junichi Kimura, Scott Lewandowski, Laura Michaels, David Smallberg, Clovis Tondo, Chris Van Wyk和Oleg Zabluda。我收到来自以下人士的意见并因此对新刷有所帮助：Daniel Steinberg, Arunprasad Marathe, Doug Stapp, Robert Hall, Cheryl Ferguson, Gary Bartlett, Michael Tamm, Kendall Beaman, Eric Nagler, Max Hailperin, Joe Gottman, Richard Weeks, Valentin Bonnard, Jun He, Tim King, Don Maier, Ted Hill, Mark Harrison, Michael Rubenstein, Mark Rodgers, David Goh, Brenton Cooper, Andy Thomas-Cramer, Antoine Trux, John Wait, Brian Sharon, Liam Fitzpatrick, Bernd Mohr, Gary Yee, John O'Hanley, Brady Patterson, Christopher Peterson, Feliks Kluzniak, Isi Dunietz, Christopher Creutzi, Ian Cooper, Carl Harris, Mark Stickel, Clay Budin, Panayotis Matsinopoulos, David Smallberg, Herb Sutter, Pajo Misljencevic, Giulio Agostini, Fredrik Blomqvist, Jimmy Snyder, Byrial Jensen, Witold Kuzminski, Kazunobu Kuriyama, Michael Christensen, Jorge Yá&ntilde;ez Teruel, Mark Davis, Marty Rabinowitz, Ares Lagae和Alexander Medvedev. 
第三版早期部分草稿由以下人士共同检阅：Brian Kernighan, Angelika Langer, Jesse Laeuchli, Roger E. Pedersen, Chris Van Wyk, Nicholas Stroustrup和Hendrik Schober。完整草稿由以下人士共同检阅：Leor Zolman, Mike Tsao, Eric Nagler, Gene Gutnik, David Abrahams, Gerhard Kreuzer, Drosos Kourounis, Brian Kernighan, Andrew Kirmse, Balog Pal, Emily Jagdhar, Eugene Kalenkovich, Mike Roze, Enrico Carrara, Benjamin Berck, Jack Reeves, Steve Schirripa, Martin Fallenstedt, Timothy Knox, Yun Bai, Michael Lanzetta, Philipp Janert, Guido Bartolucci, Michael Topic, Jeff Scherpelz, Chris Nauroth, Nishant Mittal, Jeff Somers, Hal Moroff, Vincent Manis, Brandon Chang, Greg Li, Jim Meehan, Alan Geller, Siddhartha Singh, Sam Lee, Sasan Dashtinezhad, Alex Marin, Steve Cai, Thomas Fruchterman, Cory Hicks, David Smallberg, Gunavardhan Kakulapati, Danny Rabbani, Jake Cohen, Hendrik Schober, Paco Viciana, Glenn Kennedy, Jeffrey D. Oldham, Nicholas Stroustrup, Matthew Wilson, Andrei Alexandrescu, Tim Johnson, Leon Matthews, Peter Dulimov和Kevlin Henney。某些个别条款的草稿由Herb Sutter和Attila F. Feher检阅。
检阅一份不够洗炼（而且可能尚未完成）的手稿是件吃力的工作，在时间压力之下进行只会使得它更困难。我要感谢这么多人愿意为我做这件事。
如果对讨论素材缺乏背景，而又期望捕捉手稿中的每一个问题，检阅工作将更加困难。令人惊讶的是还是有人选择成为文字编辑。Chrysta Meadowbrooke是本书的文字编辑，她的周密工作揭露出许多逃过其他每一双眼睛的问题。
Leor Zolman在正式检阅前先以多种编译器检验所有代码，在我校订手稿之后又做一次。如果书中仍然存在任何错误，全是我的责任。Karl Wiegers和（特别是）Tim Johnson提供我快速而有帮助的反馈。
John Wait是我的前两版编辑，有点傻傻地又签下这一份责任约。他的助理Denise Mickelsen熟练地处理我频繁的纠缠，带着愉快的微笑（至少我认为她是。呃，我从未见过她）。Julie Nahil 向来扮演救火队角色并因此成为我的产品经理。她以非凡的镇定指挥产品计划内的六周通宵工作。John Fuller（她的老板）和Marty Rabinowitz（他的老板）也协助解决了产品发行量问题。Vanessa Moore的正式工作是提供FrameMaker和PDF支持，但她也协助制作附录B的条目并格式化打印于封底里。Solveig Haugland协助将索引格式化。Sandra Schroeder和Chuti Prasertsith负责封面设计，Chuti总是在每次我说“如果把这张相片加上那个颜色的线条会怎样？”时修订封面。Chanda Leary-Coutu对市场营销举重若轻。
在我忙于手稿的数月之中，电视剧集Buffy the Vampire Slayer常常帮助我在每天工作结束后解压。带着极大的克制我才能够不让Buffyspeak的身影进入本书。Kathy Reed于1971年教我写程序，我很高兴我们保持友谊至今。Donald French雇用我和Moises Lejter于1989年建立起C++ 培训教材（这项计划诱使我真正了解C++），1991年他又聘我在Stratus Computer体现它们。该班学生鼓励我写下最终成为本书第一版的东西。Don也将我介绍给John Wait，他同意出版它们。
我的妻子Nancy L. Urbano持续鼓励我写作，即使在我完成了七本书、一张CD改写版、一篇论文之后。她有令人难以置信的忍耐、自制与宽容。没有她我无法完成我所完成的任何事情。 
自始至终，我们的狗儿Persephone是我们无可取代的同伴。令人悲伤的是，在这个项目的大部分时间里，她和我们之间的交往关系已经改为办公室内的一坛骨灰瓮。我们十分怀念她。
目  录
译序 vii
中英简繁术语对照 ix
目录 xvii
序言 xxi
致谢 xxiii
导读 1
1. 让自己习惯C++ 11
Accustoming Yourself to C++ 11
条款01：视C++ 为一个语言联邦 11
View C++ as a federation of languages 11
条款02：尽量以const, enum, inline替换 #define 13
Prefer consts,enums, and inlines to #defines. 13
条款03：尽可能使用const 17
Use const whenever possible. 17
条款04：确定对象被使用前已先被初始化 26
Make sure that objects are initialized before they're used. 26
2. 构造/析构/赋值运算 34
Constructors, Destructors, and Assignment Operators 34
条款05：了解C++ 默默编写并调用哪些函数 34
Know what functions C++ silently writes and calls. 34
条款06：若不想使用编译器自动生成的函数，就该明确拒绝 37
Explicitly disallow the use of compiler-generated functions you do not want. 37
条款07：为多态基类声明virtual析构函数 40
Declare destructors virtual in polymorphic base classes. 40 
条款08：别让异常逃离析构函数 44
Prevent exceptions from leaving destructors. 44
条款09：绝不在构造和析构过程中调用virtual函数 48
Never call virtual functions during construction or destruction. 48
条款10：令operator= 返回一个reference to *this 52
Have assignment operators return a reference to *this. 52
条款11：在operator= 中处理“自我赋值” 53
Handle assignment to self in operator=. 53
条款12：复制对象时勿忘其每一个成分 57
Copy all parts of an object. 57
3. 资源管理 61
Resource Management 61
条款13：以对象管理资源 61
Use objects to manage resources. 61
条款14：在资源管理类中小心copying行为 66
Think carefully about copying behavior in resource-managing classes. 66
条款15：在资源管理类中提供对原始资源的访问 69
Provide access to raw resources in resource-managing classes. 69
条款16：成对使用new和delete时要采取相同形式 73
Use the same form in corresponding uses of new and delete. 73
条款17：以独立语句将newed对象置入智能指针 75
Store newed objects in smart pointers in standalone statements. 75
4. 设计与声明 78
Designs and Declarations 78
条款18：让接口容易被正确使用，不易被误用 78
Make interfaces easy to use correctly and hard to use incorrectly. 78
条款19：设计class犹如设计type 84
Treat class design as type design. 84
条款20：宁以pass-by-reference-to-const替换pass-by-value 86
Prefer pass-by-reference-to-const to pass-by-value. 86
条款21：必须返回对象时，别妄想返回其reference 90
Don't try to return a reference when you must return an object. 90
条款22：将成员变量声明为private 94
Declare data members private. 94
条款23：宁以non-member、non-friend替换member函数 98
Prefer non-member non-friend functions to member functions. 98
条款24：若所有参数皆需类型转换，请为此采用non-member函数 102
Declare non-member functions when type conversions should apply to all parameters. 102
条款25：考虑写出一个不抛异常的swap函数 106
Consider support for a non-throwing swap. 106
5. 实现 113
Implementations 113
条款26：尽可能延后变量定义式的出现时间 113
Postpone variable definitions as long as possible. 113
条款27：尽量少做转型动作 116
Minimize casting. 116
条款28：避免返回handles指向对象内部成分 123
Avoid returning "handles" to object internals. 123
条款29：为“异常安全”而努力是值得的 127
Strive for exception-safe code. 127
条款30：透彻了解inlining的里里外外 134
Understand the ins and outs of inlining. 134
条款31：将文件间的编译依存关系降至最低 140
Minimize compilation dependencies between files. 140
6. 继承与面向对象设计 149
Inheritance and Object-Oriented Design 149
条款32：确定你的public继承塑模出is-a关系 150
Make sure public inheritance models "is-a." 150
条款33：避免遮掩继承而来的名称 156
Avoid hiding inherited names. 156
条款34：区分接口继承和实现继承 161
Differentiate between inheritance of interface and inheritance of implementation. 161
条款35：考虑virtual函数以外的其他选择 169
Consider alternatives to virtual functions. 169
条款36：绝不重新定义继承而来的non-virtual函数 178
Never redefine an inherited non-virtual function. 178
条款37：绝不重新定义继承而来的缺省参数值 180
Never redefine a function's inherited default parameter value. 180
条款38：通过复合塑模出has-a或"根据某物实现出" 184
Model "has-a" or "is-implemented-in-terms-of" through composition. 184
条款39：明智而审慎地使用private继承 187
Use private inheritance judiciously. 187
条款40：明智而审慎地使用多重继承 192
Use multiple inheritance judiciously. 192
7. 模板与泛型编程 199
Templates and Generic Programming 199
条款41：了解隐式接口和编译期多态 199
Understand implicit interfaces and compile-time polymorphism. 199
条款42：了解typename的双重意义 203
Understand the two meanings of typename. 203
条款43：学习处理模板化基类内的名称 207
Know how to access names in templatized base classes. 207
条款44：将与参数无关的代码抽离templates 212
Factor parameter-independent code out of templates. 212
条款45：运用成员函数模板接受所有兼容类型 218
Use member function templates to accept "all compatible types." 218
条款46：需要类型转换时请为模板定义非成员函数 222
Define non-member functions inside templates when type conversions are desired. 222
条款47：请使用traits classes表现类型信息 226
Use traits classes for information about types. 226
条款48：认识template元编程 233
Be aware of template metaprogramming. 233
8. 定制new和delete 239
Customizing new and delete 239
条款49：了解new-handler的行为 240
Understand the behavior of the new-handler. 240
条款50：了解new和delete的合理替换时机 247
Understand when it makes sense to replace new and delete. 247
条款51：编写new和delete时需固守常规 252
Adhere to convention when writing new and delete. 252
条款52：写了placement new也要写placement delete 256
Write placement delete if you write placement new. 256
9. 杂项讨论 262
Miscellany 262
条款53：不要轻忽编译器的警告 262
Pay attention to compiler warnings. 262
条款54：让自己熟悉包括TR1在内的标准程序库 263
Familiarize yourself with the standard library, including TR1. 263
条款55：让自己熟悉Boost 269
Familiarize yourself with Boost. 269
A 本书之外 273
B 新旧版条款对照 277
索引 280