C++ Primer第五版, 第一部分: 如何修訂原書

openkk 12年前發布 | 15K 次閱讀 C/C++

        英文原文:C++ Primer 5th Edition, Part 1: How To Revise a Textbook

        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的程序,僅此而已。

C++ Primer第五版, 第一部分: 如何修訂原書

本文作者:Andrew Koenig        

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

for (vector<int>::iterator it = v.begin (); it := v.end (); ++it)
      foo (*it);

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

for (decltype (v.size ()) i = ; i != v.size (); ++i)
      foo (v[i]);

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

for (auto it = v.begin (); it != v.end (); ++it)

      foo (it);

        甚至是這樣:

for (auto x: v)
      foo (x)

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

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

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

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!