最近在讀《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現象),那會使你的程式慢得像蝸牛爬一樣(不過倒是可以提供硬碟控制器一個好的運動機會)。