《More Exceptional C++》前言

如何才能成为专家?在我了解的所有领域中答案都是一样的:

1.        学习基础知识。

2.        再一次学习同样的素材,但这一次集中于你初次学习时未意识到其重要性的细节。 

如果你选择了适当的细节且对它们的掌握透彻到无需为之费神的地步,你就快要成为一位专家了。然而,在真正成为专家之前,你又如何知道应该选择哪些细节呢?如果有人已经为你挑选好适当的细节,你学习起来将会更快速、更快乐。 

例如,我曾经参加过一位不错的摄影师Fred Picker举办的摄影研讨班。他告诉我们,摄影只有两个困难的环节,一是如何取景,二是何时按快门。接下来他花费大部分研讨班时间向我们介绍关于曝光、加工和冲印的技术细节——只有彻底理解了这些细节,我们才能很好地掌握摄影,否则关注那两个“困难”的环节就了无意义。 

尝试回答关于C++程序的问题,是一种尤其富有乐趣的学习C++编程细节的方式。例如: 

l          f(a++);f(a); ++a;具有相同的效果吗?

l          你能使用一个迭代器来改变一个set的内容吗?

l          假定你正在使用一个名为vvector,它占用的内存已经增长至让人感到不爽的地步,你希望清除该vector并将其占用的内存归还给系统,那么,v.clear()能胜任吗? 

你也许已经猜到这些貌似明显的问题答案必定是“no”,否则我就不会问这些问题了,但你知道答案为何是“no”吗?你确信? 

本书回答了这些问题以及其他很多精心挑选的“貌似普通的程序”的问题。没有多少书籍像本书一样(当然了,它的姊妹篇《Exceptional C++》除外)。很多宣称是“高级”的C++书籍,要么是关于专门的主题(只有当你希望精通这些特定的主题而非试图深入研究日常编程问题时,这些书才有意义),要么纯粹是拿“高级”一词来吸引读者的眼球。 

一旦透彻理解了这些问题及其答案,你在编程时就不必过多地烦神于有关细节,大可将精力集中于真正努力解决的那些问题之上。 

Andrew Koenig
2001
6

荣耀 译
2006年1月
南京师范大学
www.royaloo.com