快速入門(mén)的一些C\C++書(shū)籍
人們常常問(wèn)我有什么C++和編程的書(shū)籍推薦,今天就為大家分享了幾本
第一個(gè)注意項(xiàng):如果你打算學(xué)習(xí)C++,請(qǐng)務(wù)必學(xué)習(xí)最新版的C++ 2011。這個(gè)版本的C++移除了許多由C++強(qiáng)大帶來(lái)的一些痛苦之處。另外,也不用擔(dān)心C++ 2014的書(shū)籍,大多數(shù)編譯器已經(jīng)開(kāi)始支持它了。
學(xué)習(xí)編程
學(xué)習(xí)編程包含以下幾個(gè)重要方面:
- 了解語(yǔ)言的語(yǔ)法
- 知道那些特性可以使用和何時(shí)使用
- 寫(xiě)出可讀性好的代碼:編譯器可以理解,但是下一個(gè)人是否可以閱讀呢?
- 在一個(gè)更高層次設(shè)計(jì)結(jié)構(gòu)良好的程序
為了學(xué)習(xí)一門(mén)語(yǔ)言,通常我們可以找到叫《X語(yǔ)言編程》的書(shū)。這也形成了一個(gè)潛規(guī)則:當(dāng)你創(chuàng)建一門(mén)嚴(yán)肅的語(yǔ)言的時(shí)候,你需要編寫(xiě)這樣一本書(shū)。學(xué)習(xí)語(yǔ)言有點(diǎn)像學(xué)習(xí)作文,但這并不意味著你能夠突然變成一個(gè)著名散文作家!
對(duì)于C++,這里有兩本相關(guān)的書(shū):
- 《C程序設(shè)計(jì)語(yǔ)言》 (Brian W. Kernighan, Denis M. Ritchie, TCPL)。這本書(shū)不是關(guān)于C++的,不過(guò)所有與C有關(guān)的東西都和C++有關(guān)。例如,這本書(shū)附帶的例子都可以看作C++的例子,只是不是真正的C,因?yàn)镃++比C的編譯器要求更加嚴(yán)格。但是大部分編寫(xiě)良好的C程序都可以在C++下編譯通過(guò),TCPL是一本小書(shū),并且被譽(yù)為X語(yǔ)言編程中最好的書(shū)籍。書(shū)中每一頁(yè)都充滿智慧。
- 《C++程序設(shè)計(jì)語(yǔ)言》(Bjarne Stroustrup),一本杰出的書(shū),書(shū)中的每一頁(yè)同樣充滿智慧。這本書(shū)有1400頁(yè)。Verity Stob對(duì)這本書(shū)有熱烈的評(píng)論。在TCPL中,我們讀到的是“C不是一個(gè)大的語(yǔ)言,因此也不需要一本長(zhǎng)篇大論的書(shū)來(lái)講解”,但是講解C++的書(shū)卻有1400頁(yè)。盡管這本書(shū)很難一頁(yè)一頁(yè)地讀下去(不過(guò),我?guī)缀踝x過(guò)了書(shū)中的每一頁(yè)),但是我建議每個(gè)人都擁一本。它講解了C++中的每一個(gè)方面,并且講解得非常不錯(cuò)。有這本書(shū)可以作為C++的參考,你的編程生涯會(huì)受益良多。
我需要聲明一點(diǎn),《C程序設(shè)計(jì)語(yǔ)言》不是一本學(xué)習(xí)C++的入門(mén)書(shū)籍,這本書(shū)是用來(lái)指導(dǎo)你學(xué)習(xí)的,同時(shí),《C程序設(shè)計(jì)語(yǔ)言》也單獨(dú)提取了《A Tour of C++ 》篇章。
C++不僅是一門(mén)語(yǔ)言,也是指一個(gè)函數(shù)庫(kù)。在《C++程序設(shè)計(jì)語(yǔ)言》中也講解了C++標(biāo)準(zhǔn)庫(kù),為了全面了解C++標(biāo)準(zhǔn)庫(kù),我推薦:
- 《C++標(biāo)準(zhǔn)程序庫(kù):自修教程與參考手冊(cè)》(Nikolai Josuttis),和《C++程序設(shè)計(jì)語(yǔ)言》一樣,這也是一本大部頭的書(shū)。但是這本書(shū)涵蓋了C++標(biāo)準(zhǔn)庫(kù)的每一個(gè)方面(同時(shí),也被稱作C++標(biāo)準(zhǔn)模版庫(kù)),第二版中涵蓋了C++2011標(biāo)準(zhǔn)。
如果你之前從事高級(jí)語(yǔ)言比如python,perl或者java,C和C++可能讓人生畏。不像其他語(yǔ)言,C/C++非常接近硬件。這也有一個(gè)優(yōu)點(diǎn),可以充分利用硬件優(yōu)勢(shì),但也讓你需要面對(duì)現(xiàn)實(shí)細(xì)節(jié)。Simon Tatham (作為Putty的開(kāi)發(fā)者和編寫(xiě)《缺失代碼怪味》的作者而知名,雖然他現(xiàn)在使用C開(kāi)發(fā))寫(xiě)了一篇非常棒的文檔:《The Descent to C》,這會(huì)降低你的學(xué)習(xí)難度,甚至經(jīng)驗(yàn)豐富的C開(kāi)發(fā)者也可能受益一二。
如果你讀了上面三本書(shū)和鏈接,你已經(jīng)可以熟練掌握C++了,并且善用C++標(biāo)準(zhǔn)庫(kù)。不過(guò),你還沒(méi)有學(xué)習(xí)如何使用和何時(shí)適合使用C++的特性。C++作為一門(mén)強(qiáng)大的語(yǔ)言,有句話說(shuō):“使用C,你犯錯(cuò)可能砸到自己的腳,而使用C++,你犯錯(cuò)可能導(dǎo)致你整條腿都廢了“,這說(shuō)的都是真的。
另外,C++強(qiáng)大之處在于你可以繼續(xù)使用你之前語(yǔ)言的開(kāi)發(fā)方式。“我可以在任何語(yǔ)言中寫(xiě)編寫(xiě)FORTRAN代碼”。不過(guò)這樣不利于你成為一個(gè)更好的開(kāi)發(fā)者。
用好C++
這里也有三本書(shū),作者都是Scott Meyers,這將大大簡(jiǎn)化一個(gè)立志于C++開(kāi)發(fā)的人的生活:
1、Effective C++ 》——列舉了一些常見(jiàn)錯(cuò)誤,有用的特性和編程中需要注意的事項(xiàng)。最近更新于2005年。
2、More Effective C++》——和上面一樣,不過(guò)講述得更多一些,同樣值得你去閱讀。
3、Effective STL》——最后更新于2001年,和《Effective C++》一樣,不過(guò)關(guān)注于C++標(biāo)準(zhǔn)庫(kù)。
如果你只想讀其中一本,選擇《Effective C++》,如果你想選擇兩本,再選擇《Effective STL》。
需要注意的是,Scott正在準(zhǔn)備一本新的書(shū),全面覆蓋了新的C++2014標(biāo)準(zhǔn)(這可以看著是對(duì)C++2011標(biāo)準(zhǔn)的改進(jìn),并且當(dāng)前大多數(shù)編譯器已經(jīng)支持了C++2014)。一旦這本書(shū)出版,你應(yīng)當(dāng)?shù)谝粫r(shí)間購(gòu)入,本書(shū)的預(yù)覽部分已經(jīng)看起來(lái)相當(dāng)棒了。
更新:許多讀者都推薦了Stanley Lippman的《C++ Primer》,我不了解這本書(shū),不過(guò)它更新了C++2011標(biāo)準(zhǔn)并且收到了很多贊譽(yù),請(qǐng)告訴我你的觀點(diǎn)。
編寫(xiě)良好的代碼
下面提到的書(shū)都討論了代碼風(fēng)格,如果編寫(xiě)代碼,不過(guò)它們其實(shí)范圍更廣。指導(dǎo)你如何編寫(xiě)可讀性好的代碼的書(shū)有:
1、《程序設(shè)計(jì)實(shí)踐》,(Brian W. Kernighan, Rob Pike, TPoP),這不是一本特定于C++的書(shū),不過(guò)談?wù)摿嗽S多關(guān)于如何組織代碼,何時(shí)優(yōu)化代碼,何時(shí)不做優(yōu)化,如果調(diào)試和如何編寫(xiě)代碼避免調(diào)試等等,我覺(jué)得每個(gè)開(kāi)發(fā)組織都應(yīng)該有這樣一本書(shū)。
2、《Linux內(nèi)核代碼規(guī)范》(Linus Torvalds),這也不是一本關(guān)于C++的書(shū),但是在第4節(jié)“命名”,第六節(jié)“函數(shù)”和第八節(jié)“注釋”中,我們都可以學(xué)習(xí)到許多。
每個(gè)想要提高其代碼的程序員最好認(rèn)真閱覽《程序設(shè)計(jì)實(shí)踐》的每一頁(yè)。
設(shè)計(jì)大規(guī)模的代碼
我只知道一本書(shū)講述了這一點(diǎn),我的一些思想形成也有賴于它。
《Large-Scale C++ Software Design 》(John Lakos),盡管本書(shū)有些年頭,里面的一些建議用于指導(dǎo)當(dāng)初為缺乏存儲(chǔ)并且性能低下的機(jī)器開(kāi)發(fā)程序的人們,從這本書(shū)我學(xué)習(xí)了如何將一個(gè)復(fù)雜系統(tǒng)拆解為多個(gè)有意義的模塊。特別需要注意的是在循環(huán)中處理依賴代碼。那些額外出現(xiàn)的細(xì)節(jié),使得你的代碼幾乎不能測(cè)試,因?yàn)槊總€(gè)模塊都非常依賴其他模塊。
以上就是我為大家推薦的書(shū)籍,都是我個(gè)人的觀點(diǎn),希望對(duì)大家學(xué)習(xí)C++有所幫助,祝學(xué)習(xí)C++的童鞋進(jìn)步!
相關(guān)文章
淺談c語(yǔ)言中轉(zhuǎn)義字符的用法及注意事項(xiàng)
下面小編就為大家?guī)?lái)一篇淺談c語(yǔ)言中轉(zhuǎn)義字符的用法及注意事項(xiàng)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08
Windows平臺(tái)下配置VS Code的C++環(huán)境教程
這篇文章主要介紹了Windows平臺(tái)下配置VS Code的C++環(huán)境教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
C++中volatile和mutable關(guān)鍵字用法詳解
這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
簡(jiǎn)單聊聊C++中回調(diào)函數(shù)的實(shí)現(xiàn)
回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++中回調(diào)函數(shù)實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-01-01

