有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过这本书之后,就获得了迅速提升自己C++功力的一个契机。\r\n 在国际上﹐本书所引起的反响﹐波及整个计算技术出版领域﹐余音至今未绝。几乎在所有C++书籍的推荐名单上﹐本书都会位于前三名。作者高超的技术把握力、独特的视角﹑诙谐轻松的写作风格﹑独具匠心的内容组织﹐都受到极大的推崇和仿效。这种奇特的现象﹐只能解释为人们对这本书衷心的赞美和推崇。\r\n 这本书不是读完一遍就可以束之高阁的快餐读物,也不是用以解决手边问题的参考手册,而是需要您去反复阅读体会的,C++是真正程序员的语言,背后有着精深的思想与无与伦比的表达能力,这使得它具有类似宗教般的魅力。希望这本书能够帮助您跨越C++的重重险阻,领略高处才有的壮美风光,做一个成功而快乐的C++程序员。
译序\r\n 中英简繁术语对照\r\n目录\r\n序言\r\n致谢\r\n导读\r\n1.让自己习惯C++\r\n 条款01:视C++为一个语言联邦\r\n 条款02:尽量以const,enum,inline替换#define\r\n 条款03:尽可能使用const\r\n 条款04:确定对象被使用前已先被初始化\r\n2.构造/析构/赋值运算\r\n 条款05:了解C++默默编写并调用哪些函数\r\n 条款06:若不想使用编译器自动成生的函数,就该明确拒绝\r\n 条款07:为多态基类声明Virtual析构函数\r\n 条款08:别让异常逃离析构函数\r\n 条款09:绝不在构造和析构过程中调用Virtual函数\r\n 条款10:令Operator=返回一个referenceto this\r\n 条款11:在Operator=中处理“自我赋值”\r\n 条款12:复制对象时勿忘其每一个成分\r\n3.资源管理\r\n 条款13:以对象管理资源\r\n 条款14:在资源管理类中小心Coping行为\r\n 条款15:在资源管理类中提供对原始资源的访问\r\n 条款16:成对使用new和delete对象置入智能指针\r\n 条款17:以独立语句将newed对象置入智能指针\r\n4.设计与声明\r\n 条款18:让接口容易被正确使用,不易被误用\r\n 条款19:设计class犹如设计type\r\n 条款20:宁以pass-by-reference-to-const替换Pass-by-value\r\n 条款21:必须返回对象时,别妄想返回其reference\r\n 条款22: 将成员变量声明为private\r\n 条款23: 宁以non-member、non-friend替换member函数\r\n 条款24:若有所参数皆需类型转换,请为此采用non-member函数\r\n 条款25:考虑写出一个不抛异常的swap函数\r\n5.实现\r\n 条款26:尽可能延后变量定义式的出现时间\r\n 条款27:尽量少做转型动作\r\n 条款28:避免返回handles指向对象内部成分\r\n 条款29:为“异常安全”而努力是值得的\r\n 条款30:透彻了解inlining的里里外外\r\n 条款31:将文件间的编译依存关系降至最低\r\n6.继承与面向对象设计\r\n 条款32:确定你的public继承塑模出is-a关系\r\n 条款33:避免遮掩继承而来的名称\r\n 条款34:区分接口继承和实现继承\r\n 条款35:考虚virtual函数以外的其他选择\r\n 条款36:绝不重新定义继承而来的non-virtual函数\r\n 条款37:绝不重新定义继承而来的缺省参数值\r\n 条款38:通过复合塑模出has-a或“根据某物实现出”\r\n 条款39:明智而审慎地使用private继承\r\n 条款40:明智而审慎地使用private继承\r\n7.模板与泛型编程\r\n8.定制new和delete\r\n9.杂项讨论\r\nA 本书之外\r\nB 新旧版条款对映\r\n索引
译序
按孙中山先生的说法,这个世界依聪明才智的先天高下得三种人:先知先觉得发明家,后知后觉得宣传家,不知不觉得实践家。三者之中发明家最少最稀珍,最具创造力。正是匠心独具的发明家创造了这个花花绿绿的计算机世界。
以文字、图书、授课形式来讲解、宣扬、引导技术的人,一般被视为宣传家而非发明家。然而,有一类最高等级的技术作家,不但能将精辟独到的见解诉诸文字,又能创造新的教学形式,引领风骚,对技术的影响和对产业的贡献不亚于技术或开发工具的创造者。这种人当之发明家亦无愧矣。
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于台湾新竹
jjhou@jjhou.com
http://www.jjhou.com(繁体) http://jjhou.csdn.net(简体)
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大学获得计算机博士学位。他的网址是www,aristeia.com.
无封面