Matthew Wilson,是一名软件开发顾问,也是STLSoft库的创建者。他为双月刊C/C++ Users Journal撰写关于将C/C++与其他语言和技术进行整合的专栏文章,同时也是C++ Experts Forum在线专栏作家。Wilson有十余年C++开发经验。
荣耀,南京师范大学教师。他是一名C++讲师和研究者,译有《C++必知必会》、《C++ Templates全览》以及《C++ Template Metaprogramming中文版》(中文繁体版)等,并在期刊杂志上发表过多篇文章。他原任电力自动化研究院工程师与项目经理,是数个企业级信息系统项目负责人。
刘未鹏,南京大学计算机系硕士毕业,现就职于微软亚洲研究院创新工程中心。
展开
世界上没有完美的编程语言。在本书中,Matthew Wilson不但为我们指出C++中诸多不完美之处,还提供了经过实践检验的应对技术和技巧,便于我们利用“不完美的C++”编写出近乎完美的代码——强健、高效、灵活、可移植、优雅的代码,而这些代码在声称为“完美的语言”中往往更难实现。
本书对给出的每一个“不完美”都进行了细致的探讨:为什么说它是一个“不完美”?对其修复的指导思想是什么?有时候只是告诫你避免做些什么,给出一些约束和建议,更多的时候则为你提供现实的解决方案,这些方案往往离不开对现代模板编程技术的使用。
书中包含有许多你未曾听过或用过的技术,有些属于作者的创新,有些则是对现有技术的精化,二者均被提升到“范式”的高度。例如:应用程序二进制接口(ABI)、垫片(Shim)、饰面(Veneer)、螺栓(Bolt-in)、区间(range)、属性(property)等。不少主题难度大,此前为其他C++专家所忽略。要探讨它们除了需要勇气外,第一手经验更是不可或缺。作为STLSoft库的主创者,Matthew在举例时,对Windows API、MFC、ATL、COM以及UNIX等都是信手拈来。
除了丰富的实践、扎实的理论以及缜密的逻辑外,Matthew的文笔流畅,语言幽默,说理直接,字里行间流露出过人的自信,使得本书极具阅读趣味。
本书具有一定的阅读门槛,目标读者为中、高级职业C++程序员。书中展示的代码示例、编程技术往往在几款甚至十几款编译器上进行验证, 辅以表格对其各色特性加以比较,并针对不同编译器所表现出的差异性而给出高效、可移植的解决方案——就像很多现实世界中的C++程序员应该做(而没做到)的那样。如果你正在寻找一本真材实料的“C++实战”参考书,本书不会让你失望。
本书中文版由我和刘未鹏先生合译。未鹏思维敏捷,技术、文笔俱佳,我很高兴与他合作。
感谢陈冀康编辑给予的理解和支持。感谢朱艳的照料和热爱。荣珅则常常用他的小拳头乱砸书房的门,并大声地叫“爸爸”,这种干扰让我获得了必不可少的休息时间。
已有的经典名著使得C++新书问世难度加大,后来者若无过人之处就很难引起C++社群的注意,Imperfect C++、C++ Common Knowledge以及C++ Template Metaprogramming等佳作一经问世便得到广泛的关注。作为译者(之一),我祝愿它们能够带给各位久违的快乐!
——荣耀
刀有很多种,有单刀,双刀,朴刀,戒刀,锯齿刀,砍山刀,鬼头刀,雁翎刀,五凤朝阳刀,鱼鳞紫金刀。
—— 古龙《飞刀,又见飞刀》
这里我们要说的刀,是瑞士军刀,瑞士军刀其实严格来说并不能算是一种刀,其功能的繁杂和精细已然超过了刀的范畴。它包含的工具一般有主刀、小刀、剪刀、开瓶器、木锯、小改锥、拔木塞钻、牙签、小镊子等,而在一些工具上还设计了多种功用,如开瓶器上,就具有开瓶、平口改锥、电线剥皮槽3种功用。随着时代的发展,一些新兴的电子技术也被引入瑞士军刀中,如内藏激光笔、电筒等。
瑞士军刀是军人在野外生存的必备工具,其小体积浓缩众多实用功能的精心设计能够将一把刀的容限发挥到最大,丝毫不逊于《第一滴血》中蓝博带在身上的那把锐利的寒光闪闪的钢刀。
那么现在你拿在手里的这本书就是一把瑞士军刀!
这是一本非常特别的C++图书,在市面上已经存在的大量经典C++书籍当中,这本书的着眼点和写作风格使它显得那么特立独行和标新立异,甚至有点另类。书中几乎巨细靡遗地涵盖了C++中大大小小的不完美之处,并以一系列成功案例证明C++的确不完美同时也提供了迂回之道、解决之道,再加上其用本主义的立场,正如同一把实用的瑞士军刀,功能繁杂而面面俱到,实用之至。同其他C++著作不一样,本书虽然尊重标准,但同时又超越标准,当标准不能满足需求或成为拦路石的时候,需求才是第一位的,于是有了作者所谓的“不完美主义的实践者”以及“不完美工具箱”之说。此外,作者的所谓“苦行僧式编程”哲学在我看来也是极其实用的一种编码方式!
我们以前看到的绝大部分C++书籍可说是统统走的“阳关大道”,然而Matthew这本书却偏要走他的“独木小桥”,蹊径虽小,然则别有一番风味和景观。我们意识到原来C++中也存在着如此多大大小小的不完美之处,就像宫崎俊电影中的那些打满补丁的海盗飞机一样。Bjarne本就说过,C++是为“用本”而设计的,诚然!而本书最大的趣味就在于它并不去一味抱怨这些缺点,而是积极地采取其他替代方案来达到同样的目的,并借此展现出C++自由强大的一面!
作者Matthew常用“survive”一词来描述在编码的现实世界中的境况,作为STLSoft库的主要编写者,他十几年来积累的经验在书中充盈四溢,很多我们平常看不到的方面都会被他挑出来,甚至连我这个译者都觉得有点“啰嗦”。不过,对于喜欢他这种“唠叨”讲法的人,他那种辨证的严密论证法倒是能令你获益颇多。另外,书中随处可见具有作者个人特色的幽默,在大量平淡无奇的技术书籍当中可算是一个亮点。
本书的一个小缺憾就是它不适合初学者,某些地方甚至对于中级读者来说都有一定的难度,作者自己经验非常丰富,因此有些地方就不加解释地一带而过,为此译者适当添加了一些译注,以便读者理解和阅读。
最后,感谢荣耀先生在本书初译的过程中一直给予的支持和信任,并容忍我总是延期交付各章译稿。荣耀先生对技术的精益求精和一丝不苟也令我在翻译的过程中获益良多。
最大的感激要归于我的父母和我的爷爷,感谢他们一直以来对我的追求的支持和鼓励,没有他们我无法想象能够完成这项工作。
希望这本令我在翻译过程中获益匪浅的书也能够给你带来美妙而独一无二的阅读享受,Let’s dig in!
——刘未鹏