?C++之父給C++程序員的1047條建議(文末送書)
從1979年C++誕生的那一天起,C++之父Bjarne Stroustrup就一直致力于C++的標(biāo)準(zhǔn)制定、語言設(shè)計與實(shí)現(xiàn)、教學(xué)和研究等相關(guān)的工作,碩果累累,為C++的發(fā)展和應(yīng)用做出了杰出的貢獻(xiàn)。
Stroustrup不僅僅是在C++方面取得了不菲的成就,在其他很多方面都頗有建樹。為了向Stroustrup致敬,我們來看看他亮眼的履歷。

圖 C++之父Bjarne Stroustrup
Bjarne Stroustrup介紹
C++語言之父:C++的設(shè)計者和最初實(shí)現(xiàn)者,C++語言ISO標(biāo)準(zhǔn)的維護(hù)者。
科學(xué)界明星人物:曾獲《財富》雜志“美國12位最年輕的科學(xué)家”稱號,以及BYTE雜志“近20年來計算機(jī)工業(yè)最具影響力的20人”稱號。
學(xué)術(shù)造詣極高:美國工程院院士、IEEE會士、ACM會士,曾獲Sigma Xi(科學(xué)研究協(xié)會)的William Procter獎(首位獲得此獎的計算機(jī)科學(xué)家)。
教育貢獻(xiàn)重大:曾擔(dān)任德州農(nóng)工大學(xué)首席教授,為劍橋大學(xué)、哥倫比亞大學(xué)、普林斯頓大學(xué)等知名學(xué)府教育事業(yè)做出重要貢獻(xiàn)。
企業(yè)界擔(dān)任要職:現(xiàn)任摩根士丹利技術(shù)與數(shù)據(jù)部門董事總經(jīng)理,RollApp科技公司資深顧問。
著作頗豐:
The Design and Evolution of C++(《C++的設(shè)計與演化》)
A Tour of C++(《C++語言導(dǎo)學(xué)》,更新至第2版)
The C++ Programming Language(《C++程序設(shè)計語言》,更新至第4版)
Programming: Principles andPractice Using C++(《C++程序設(shè)計:原理與實(shí)踐》,更新至第2版)
為了幫助程序員更好地學(xué)習(xí)和使用C++,Stroustrup創(chuàng)建了一個內(nèi)容豐富的C++元宇宙《C++之父創(chuàng)建的C++元宇宙》。其中,這個元宇宙中包含1047條C++編程的最佳實(shí)踐,全部都是從C++語言設(shè)計者的視角和大量工程實(shí)踐中總結(jié)出來的寶貴經(jīng)驗(yàn),可謂字字珠璣。
這些最佳實(shí)踐都悉數(shù)總結(jié)在Stroustrup的3部享譽(yù)全球的著作里,由于數(shù)量比較多,本文無法全部呈現(xiàn),只能展示部分,想要領(lǐng)會語言之父思想和經(jīng)驗(yàn)的讀者,可以沿著下面的路線找到全部的1047條最佳實(shí)踐。
1.《C++程序設(shè)計語言(原書第4版)》:698條
這里隨機(jī)展示10條:
建議1:請關(guān)注編程技術(shù),而非語言特性。
建議2:設(shè)計應(yīng)該關(guān)注優(yōu)雅且高效的抽象,可能的情況下以庫的形式呈現(xiàn)。
建議3:當(dāng)接口和實(shí)現(xiàn)需要完全分離時,請使用抽象類作為接口。
建議4:如果你不確定是否會越界,請記得使用帶邊界檢查的容器。
建議5:盡量使用普通char,而非signed char或unsigned char。
建議6:讓表示所有權(quán)的指針位于句柄類的內(nèi)部。
建議7:當(dāng)不得不使用顯式類型轉(zhuǎn)換時,請盡量使用命名的轉(zhuǎn)換。
建議8:與函數(shù)指針相比,請優(yōu)先使用函數(shù)對象(包括lambda)和虛函數(shù)。
建議9:僅在確實(shí)需要時才使用protected成員,且務(wù)必小心使用。
建議10:模板可以用來構(gòu)成類型安全且緊湊的數(shù)據(jù)結(jié)構(gòu),以及用來線性化類層次。
2.《C++程序設(shè)計設(shè)計:原理與實(shí)踐(原書第2版)》:27條
這里隨機(jī)展示3條:
建議11:請不要低估類型安全的重要性。類型是大多數(shù)正確程序的核心概念,大多數(shù)用于構(gòu)建程序的有效技術(shù)依賴于類型的設(shè)計與使用。
建議12:輸入和輸出是很難處理的,所以我們必須預(yù)計到輸入輸出中所面臨的一定程度上的混亂,并接受它和適應(yīng)它。
建議13:當(dāng)設(shè)計一個類時,我們必須考慮類的初始化、拷貝與析構(gòu)。
3.《C++語言導(dǎo)學(xué)(原書第2版)》:322條
這里隨機(jī)展示12條:
建議14:理解C++語言的原語是如何映射到硬件的。
建議15:避免使用裸union,將其與類型域封裝在一個類中。
建議16:如果你的函數(shù)不拋出異常,那么將其聲明成noexcept。
建議17:如果成員函數(shù)不改變其對象的狀態(tài),將其生命為const。
建議18:如果某個類是一個資源句柄,則它需要一個用戶自定義的構(gòu)造函數(shù)、析構(gòu)函數(shù)和非默認(rèn)的拷貝操作。
建議19:不能將虛函數(shù)成員定義成模板成員函數(shù)。
建議20:如果你需要一個簡單函數(shù)對象且只用在一個地方,則使用lambda。
建議21:不要重新發(fā)明輪子,應(yīng)該使用庫;當(dāng)有多種庫可選擇時,優(yōu)先選擇標(biāo)準(zhǔn)庫。
建議22:將regex用于正則表達(dá)式的大部分常規(guī)用途。
建議23:在使用一個文件流之前,記得檢查它是否依附于某個文件上。
建議24:如果要在大量數(shù)據(jù)中執(zhí)行搜索操作,請選擇無序容器。
建議25:與垃圾回收機(jī)制相比,請優(yōu)先選擇智能指針。
不管你現(xiàn)階段的C++功底如何,應(yīng)該或多或少都能感受這些最佳實(shí)踐的價值。用“字字珠璣”來形容,一點(diǎn)也不夸張,有的是只有只有站在C++語言設(shè)計者才能明白的,有的可能是要踩了無數(shù)坑并付出一定的代價后才能明白的。
如果能將這1047條最佳實(shí)踐吃透并靈活運(yùn)用,不敢說你從此在C++領(lǐng)域可以封神(Stroustrup才是yyds),但絕對可以稱得上是高手。
要學(xué)好C++,最重要的是編程實(shí)踐,一定要編寫和閱讀有一定復(fù)雜度的工程化代碼,而不是Demo或玩具代碼。提到實(shí)踐,上面提到的C++之父的這3本書也會給你驚喜,因?yàn)闀杏?000-3000個代碼示例,這些代碼示例都是工程代碼簡化而來的,同時這3本書中還有1000多道習(xí)題。
如果你想跟著C++之父學(xué)習(xí)最正統(tǒng)的C++,想了解C++的最新動態(tài),想學(xué)習(xí)的過程事半功倍,推薦你了解C++之父構(gòu)建的C++元宇宙。

《C++程序設(shè)計語言(原書第4版)》

作者:(美)本賈尼·斯特勞斯特魯普(Bjarne Stroustrup)
譯者:王剛楊巨峰
C++之父作品,40余年長銷不衰,被翻譯為20余種語言,
世界名校教材,數(shù)百萬程序員學(xué)習(xí)C++的推崇之作
本書是在C++語言和程序設(shè)計領(lǐng)域具有深遠(yuǎn)影響、暢銷不衰的經(jīng)典著作,由C++語言的設(shè)計者和最初的實(shí)現(xiàn)者Bjarne Stroustrup編寫,對C++語言進(jìn)行了最全面、最權(quán)威的論述,覆蓋標(biāo)準(zhǔn)C++以及由C++所支持的關(guān)鍵編程技術(shù)和設(shè)計技術(shù)。本書英文原版一經(jīng)面世,即引起業(yè)內(nèi)人士的高度評價和熱烈歡迎,先后被翻譯成德、希、匈、西、荷、法、日、俄、中、韓等近20種語言,數(shù)以百萬計的程序員從中獲益,是無可取代的C++經(jīng)典力作。

《C++程序設(shè)計:原理與實(shí)踐(原書第2版)》

作者:[美] 本賈尼·斯特勞斯特魯普(Bjarne Stroustrup)
譯者:任明明王剛李忠偉劉曉光
C++之父作品,暢銷全球10余年,
被翻譯為20余種語言,1182道習(xí)題,
C++程序員從匠人到藝術(shù)家必讀之作
將經(jīng)典程序設(shè)計思想與C++開發(fā)實(shí)踐完美結(jié)合,全面地介紹了程序設(shè)計基本原理,包括基本概念、設(shè)計和編程技術(shù)、語言特性以及標(biāo)準(zhǔn)庫等,教你學(xué)會如何編寫具有輸入、輸出、計算以及簡單圖形顯示等功能的程序。此外,本書通過對C++思想和歷史的討論、對經(jīng)典實(shí)例(如矩陣運(yùn)算、文本處理、測試以及嵌入式系統(tǒng)程序設(shè)計)的展示,以及對C語言的簡單描述,為你呈現(xiàn)了一幅程序設(shè)計的全景圖。

《C++語言導(dǎo)學(xué)(原書第2版)》

作者:[美]本賈尼·斯特勞斯特魯普(Bjarne Stroustrup)
譯者:王剛
C++之父作品,暢銷全球近10年,322條編程建議,
可幫助有經(jīng)驗(yàn)的程序員3小時了解C++語言全貌和設(shè)計思想
在本書中,C++的創(chuàng)造者本賈尼?斯特勞斯特魯普描述了現(xiàn)代C++語言的構(gòu)成。這本簡潔、自成體系的導(dǎo)引書籍包含了C++語言大多數(shù)主要特性和標(biāo)準(zhǔn)庫組件。本書通過介紹編程風(fēng)格(例如面向?qū)ο缶幊毯头盒途幊蹋┮鲋С炙鼈兊腃++特性。從基本特性開始,延伸到更寬范的進(jìn)階主題,包括很多C++17新特性,例如移動語義、一致初始化、lambda表達(dá)式、改進(jìn)的容器、隨機(jī)數(shù)以及并發(fā)。本書非常全面,甚至包含一些為C++20提出的擴(kuò)展,例如概念和模塊。本書最后討論了C++語言的設(shè)計和演化。
在這篇文章下方留言 + 這篇文章的點(diǎn)贊在看,我會選取留言點(diǎn)贊量最高的 5 位同學(xué),送出這 5 本書的任意一本(中獎小伙伴自己選),《C++程序設(shè)計:原理與實(shí)踐(原書第2版)》與《C++程序設(shè)計語言(原書第4版),請獲獎粉絲備注選取的是基礎(chǔ)篇or進(jìn)階篇,1-3部分或第4部分。截止時間至 8 月 14 日晚 8 點(diǎn)。
當(dāng)然,各位讀者朋友們你也可以在當(dāng)當(dāng)或者京東上自行購買到這幾本書。
同時也歡迎各位加我微信,拉你進(jìn)微信學(xué)習(xí)交流群。也給公眾號加一個星標(biāo)。

