|
本帖最后由 石头 于 2009-11-23 22:55 编辑
作者:Scott Meyers
出版社:Addison Wesley
页数:304
文件格式:RAR
這本書是多年來我對專業程式員所做的C++教學課程下的一個自然產物。我發現,大部份學生在一個星期的密集訓練之後,即可適應這個語言的基本架構,但要他們「將這些基礎架構以有效的方式組合運用」,我實在不感樂觀。於是我開始嘗試組織出一些簡短、明確、容易記憶的準則,做為C++ 高實效性程式開發過程之用。那都是經驗豐富的C++程式員幾乎總是會奉行或幾乎肯定要避免的一些事情。
我最初的興趣在於整理出一些可被某種「lint-like 程式」施行的規則,最後我甚至領導一個計劃,研究某種可將C++原始碼中違反使用者指定條件之處檢驗出來的工具(你可以在Effective C++網站上找到此研究的一份概要報告)。不幸的是在我尚未完成其完整原型之前,這個研究計劃便結束了。幸運的是,目前市面上已有這類C++檢驗工具(商品),而且不只一個。
雖然我最初的興趣是在研究可被(某種工具)自動實施的程式設計準則,但我很快瞭解到那個研究方向的侷限性。優秀的C++程式員所奉行的準則,多數都難以「公式化」;要不就是雖然它們有許多重要的例外情況,卻被程式員盲目地奉行不渝。這使我念頭一轉:某些東西雖然不比電腦程式精準,但仍能比一本泛泛的C++ 教科書更集中火力,更打到重點。這個念頭的結果就是你手上這本書:一本內含50 個有效建議(如何改善你的C++程式技術和你的設計思維)的書。
在這本書中,你會發現一些忠告,告訴你應該做些什麼,為什麼如此;告訴你不應該做些什麼,又為什麼如此。基本而言當然whys 比whats 更重要,但檢閱一列列準則,也確實比強記一本或兩本教科書更輕鬆更方便得多。
和大部份的C++書籍不同,我的組織方式並非以語言特性做為依據。也就是說我並不在某處集中討論constructors(建構式),在另一處集中討論virtualfunctions(虛擬函式),又在第三個地方集中討論inheritance(繼承機制)。不,不是這樣,本書的每一個討論主題都剪裁合度地以一個個準則陳列出來。至於我對某特定語言性質的探討,散佈面積可能涵蓋整本書。
這種作法的優點就是比較容易反映出「特意挑選C++做為開發工具」的那些軟體系統的複雜度。在那些系統之中,光只瞭解個別語言特性是不夠的。例如,有經驗的C++ 程式員知道,瞭解inline函式和瞭解virtual destructors,並不一定表示你瞭解inline virtualdestructors。身經百戰的開發人員都認知到,理解C++各個特性之間的互動關係,才是有效使用這個語言的最重要關鍵。本書組織反映出這一基本事實。
這種作法的缺點是,你恐怕必須前後交叉參考而非只看一個地方,才能發現我所說的某個C++架構的全貌。為了將不方便性降至最低,我在書中各處放了許多交叉索引,書後並有一份涵蓋全部範圍的索引。(譯註:為了協助讀者更容易掌握Effective C++ 和More Effective C++ 二書,我以Effective C++ CD為本,為兩書的中文版額外加上兩書之間的交叉索引。此乃原書所無。如果文中出現像條款 M5 這樣的參考指示,M 便是代表MoreEffective C++)
籌劃第二版期間,我改寫此書的雄心一再被恐懼所取代。成千上萬的程式員熱情擁抱Effective C++ 第一版,我不希望破壞吸引他們的任何東西。但是自從我寫了第一版之後,六年過去了,C++ 有了變化,C++ 程式庫有了變化(見條款49),我對C++ 的瞭解也有了變化,乃至於C++ 的用途也有了變化。許許多多的變化。對我而言,重要的是我必須修訂Effective C++以反映那些變化。我嘗試一頁一頁地修改內容,但是書籍和軟體十分類似,局部加強是不夠的,唯一的機會就是系統化地重寫。本書就是重寫後的結果:Effective C++ 2.0 版。
熟悉第一版的讀者,可能有興趣知道,書中的每一個條款都經過重新檢驗。然而我相信第一版的結構至今仍是流暢的,所以整本書的結構並沒有改變。50個條款中,我保留了48 個,其中某些標題稍有變化(附隨的討論內容亦復如此)。退休下來(被取代的)兩個條款是32 和49,不過原條款32的許多資訊被我移到如今煥然一新的條款1 中。我將條款41 和42的次序做了對調,因為這樣比較能夠適當呈現它們修訂後的內容。最後,我把上一版繼承體系圖所採用的箭頭方向顛倒過來,以符合目前幾乎已經一致的習慣:從derived classes 指往base classes。我的More Effective C++一書也採用相同習慣(本書最後列有該書摘要)。
本書提供的準則,離鉅細糜遺的程度還很遠,但是完成一個好的準則— 一個幾乎可於任何時間應用於任何程式的準則,動手遠比動嘴困難得多。如果你知道其他準則,可以協助撰寫有效的C++ 程式,我非常樂意聽到你告訴我它們的故事。
此外,說不定你會覺得本書的某些條款不適合成為一般性忠告;或許你認為另有比較好的方法來完成書中所說的任務;或許你認為某些條款在技術討論方面不夠清楚,不夠完全,抑或有誤導之嫌。我衷心盼望你也能夠讓我知道你的這些想法。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|