C++ Primer第五版之一:如何修訂原書

黃小非發表於2012-08-14

Barbara Moo已經把完稿的《C++ Primer(第五版)》的文字交付給了出版社,這是7月13號的事情了。據我所知,該書的印刷工作正在進行,8月中旬的時候就應該可以在各大書店上架了。(注:《 C++ Primer》有三位作者:Stanley B. Lippman、Josée Lajoie、Barbara E. Moo)

本書大概是Barbara在過去兩年以來最主要的工作內容,尤其是從今年開始,這本書幾乎佔據了她的全部時間。我也在本書的編寫上花費了不少功夫:閱讀草稿,寫評註和建議,執行測試程式,等等。這樣一來的結果就是,我對作者在寫書過程中的思路有了非常好的理解。從我的角度來說,我不僅僅能夠告訴你作者的思路和方法,我還能告訴你為什麼我認為她的思路和方法是如此高明,以至於其他的作者都應當借鑑——當然,我很清楚其他的書不會像這本書一樣寫,對此我也完全不感到驚訝。

C++11 力圖相容C++03,而C++03 又力圖相容 C++98,C++98 則力圖相容C語言。這個向下相容的特色是C++如此強大和有用的主要原因之一。因此,通過複習C++03 的書籍中的內容,充分利用C++語言的相容性,在原先的書籍基礎上新增新的章節來介紹C++11的東西,這種思路非常的誘人。採取這樣的做法會讓事情簡單很多:因為原書中的大部分內容不需要改動。

當然,這樣做的瑕疵就是,語言的新特性會變成一種“附加題”——也就是說,在理解了該語言的所有原有內容後,在“附加練習”時才會去考慮學習這些新的特性。這樣一來,就很可能造成部分讀者最後完全沒有學到新的東西。舉個例子吧,有這麼一種現象就是,很多人去學習C++程式設計,但是他們最後學到的只是如何去用C++的編譯器編譯C語言程式。在C++11的情況下,也就很可能造成許多人實際上只學到瞭如何用新的編譯器去編譯C++03的程式,僅此而已。

Andrew Koenig

本文作者:Andrew Koenig

這兒有一個簡單的例子可以說明這種現象。假設v是一個vector<int>泛型,我們期望呼叫一個方法foo去遍歷v中的每個元素。在C++03裡面,我們就可以這麼做:

當然,更優雅的辦法是使用迭代器iterator,這樣做的好處是能夠有效地避免使用下標

如果我們利用C++11的語法程式碼去實現上述的功能,那寫法會非常不同。比如,我們首先寫一個例子,看上去像這樣:

然後,我們還可以寫成這樣:

甚至是這樣:

如果一本書教了你前兩種寫法,那麼後面提到的三種寫法就成了“附加題”,多數人寧可去堅持使用前兩種寫法,而完全不去考慮如何記住後面三種寫法。那麼從效果來說,這本書就變成了一本“介紹C++03的書,順帶提及了C++11”,讀者也就成了“學習C++03程式設計的人”,而不是學習C++11。如果真是如此,那麼去寫一本關於C++11的書,就完全沒有必要了。

Barbara決定採用最艱難的方式寫作:不僅討論C++語言中的新特性,而且將這些新特性融入到本書的各個章節當中。在接下來的幾周時間裡,我會跟大家一起討論一下關於本書中的一些例子,以及她所採取的寫作策略。

 

英文原文:Andrew Koenig  編譯:伯樂線上 – 黃小非

【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】

 

相關文章