最近在读《Effective C++ 2/e》,不时被作者幽默的文字逗得发笑。可以这么说,这是我读过的最风趣的一本技术书。当然这也离不开侯捷大师精彩的翻译。如此轻松的翻下来,已经读完了全书的一半。当然,书中的内容都是基础性的C++内容,是每个C++程序员必须要掌握的知识。
举几处作者幽默的行文:
1.(P76)如你所见,别名(aliasing)问题会以变化多端的形貌出现,所以你不可以像鸵鸟一样,蒙着眼睛以为看不见就没事儿。或许你可以,但我们中的大部分是不可以的。
2.(P123)下面是面向对象式的罗曼蒂克对话:
Object A:亲爱的,不要变心啊!
Object B:别担心,亲亲,我是永恒不变的(const)。
但就像现实生活中的情况一样,A心里头暗自揣测:“B能够信赖吗?”而答案亦如现实生活一样,视B的天性而定;我的意思是视其member functions的构成而定。
3.(P127)举个例子,看看以下函数,它传回一个String object:
String someFamousAuthor()
{
switch(rand()%3)
{
case 0:
return "Margaret Mitchell"; //著有"Gone with the Wind",一本真正的经典之作
case 1:
return "Stephen King"; //他的小说让数百万人不得安眠
case 2:
return "Scott Meyers"; //嘻嘻,这个人的事迹和其他作者不同
}
return ""; //我们永远到达不了这儿,但是在一个“必须传回数值”的函数中,所有路径都必须传回一个值,唉!
}
4.(P133)众所周知,所谓程序员是一个具有草率个性的种族。我并不是说你一定很草率或我很草率,但程序员如果没有一丁点(我真的可以说吗?)古里古怪的倾向,是很罕见的。
5.(P134)要是真这么做的话,被众人以往应该是你最幸运的下场了。比较实际一点,你会被剥层皮或者是被判罚干10年苦差,负责为电熨斗和烤面包机写微芯片码(microcode)。
现在好好听着:如果你写一个函数,传回所谓的dereferenced pointer,那么简直就是坐视内存泄漏(memory leak)的发生。
6.(P137)即使拥有虚拟内存,inline行为所造成的程序代码膨胀现象会导致病态的换页(paging)行为(也就是所谓的thrashing现象),那会使你的程序慢得像蜗牛爬一样(不过倒是可以提供硬盘控制器一个好的运动机会)。