一、什么是C++
?C語(yǔ)言是結(jié)構(gòu)化和模塊化的語(yǔ)言,適合處理較小規(guī)模的程序。對(duì)于復(fù)雜的問(wèn)題,規(guī)模較大的程序,需要高度的抽象和建模時(shí),C語(yǔ)言則不合適。為了解決軟件危機(jī), 20世紀(jì)80年代, 計(jì)算機(jī)界提出了OOP(object oriented programming:面向?qū)ο?思想,支持面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言應(yīng)運(yùn)而生。
? 1982年,Bjarne Stroustrup博士在C語(yǔ)言的基礎(chǔ)上引入并擴(kuò)充了面向?qū)ο蟮母拍?,發(fā)明了一種新的程序語(yǔ)言。為了表達(dá)該語(yǔ)言與C語(yǔ)言的淵源關(guān)系,命名為C++。因此:C++是基于C語(yǔ)言而產(chǎn)生的,它既可以進(jìn)行C語(yǔ)言的過(guò)程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類(lèi)型為特點(diǎn)的基于對(duì)象的程序設(shè)計(jì),還可以進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。
二、C++發(fā)展史
? 1979年,貝爾實(shí)驗(yàn)室的本賈尼等人試圖分析unix內(nèi)核的時(shí)候,試圖將內(nèi)核模塊化,于是在C語(yǔ)言的基礎(chǔ)上進(jìn)行擴(kuò)展,增加了類(lèi)的機(jī)制,完成了一個(gè)可以運(yùn)行的預(yù)處理程序,稱(chēng)之為C with classes。
?
接下來(lái)我們來(lái)看看C++發(fā)展史:
階段 | 內(nèi)容 |
---|---|
C with classes | 類(lèi)及派生類(lèi)、公有和私有成員、類(lèi)的構(gòu)造和析構(gòu)、友元、內(nèi)聯(lián)函數(shù)、賦值運(yùn)算符 |
C++1.0 | 添加虛函數(shù)概念,函數(shù)和運(yùn)算符重載,引用、常量等 |
C++2.0 | 更加完善支持面向?qū)ο?,新增保護(hù)成員、多重繼承、對(duì)象的初始化、抽象類(lèi)、靜態(tài)成員以及const成員函數(shù) |
C++3.0 | 進(jìn)一步完善,引入模板,解決多重繼承產(chǎn)生的二義性問(wèn)題和相應(yīng)構(gòu)造和析構(gòu)的處理 |
C++98 | C++標(biāo)準(zhǔn)第一個(gè)版本,絕大多數(shù)編譯器都支持,得到了國(guó)際標(biāo)準(zhǔn)化組織(ISO)和美國(guó)標(biāo)準(zhǔn)化協(xié)會(huì)認(rèn)可,以模板方式重寫(xiě)C++標(biāo)準(zhǔn)庫(kù),引入了STL(標(biāo)準(zhǔn)模板庫(kù)) |
C++03 | C++標(biāo)準(zhǔn)第二個(gè)版本,語(yǔ)言特性無(wú)大改變,主要:修訂錯(cuò)誤、減少多異性 |
C++05 | C++標(biāo)準(zhǔn)委員會(huì)發(fā)布了一份計(jì)數(shù)報(bào)告(Technical Report,TR1),正式更名C++0x,即:計(jì)劃在本世紀(jì)第一個(gè)10年的某個(gè)時(shí)間發(fā)布 |
C++11 | 增加了許多特性,使得C++更像一種新語(yǔ)言,比如:正則表達(dá)式、基于范圍for循環(huán)、auto關(guān)鍵字、新容器、列表初始化、標(biāo)準(zhǔn)線(xiàn)程庫(kù)等 |
C++14 | 對(duì)C++11的擴(kuò)展,主要是修復(fù)C++11中漏洞以及改進(jìn),比如:泛型的lambda表達(dá)式,auto的返回值類(lèi)型推導(dǎo),二進(jìn)制字面常量等 |
C++17 | 在C++11上做了一些小幅改進(jìn),增加了19個(gè)新特性,比如:static_assert()的文本信息可選,F(xiàn)old表達(dá)式用于可變的模板,if和switch語(yǔ)句中的初始化器等 |
C++20 | 自C++11以來(lái)最大的發(fā)行版,引入了許多新的特性,比如:模塊(Modules)、協(xié)程(Coroutines)、范圍(Ranges)、概念(Constraints)等重大特性,還有對(duì)已有特性的更新:比如Lambda支持模板、范圍for支持初始化等 |
C++23 | 制定ing |
? C++還在不斷的向后發(fā)展。但是:現(xiàn)在公司主流使用還是C++98和C++11,所有大家不用追求最新,重點(diǎn)將C++98和C++11掌握好,等工作后,隨著對(duì)C++理解不斷加深,有時(shí)間可以去琢磨下更新的特性。
關(guān)于C++2X最新特性的討論
三、C++的重要性
3.1 語(yǔ)言的使用廣泛度
下圖數(shù)據(jù)來(lái)自TIOBE編程語(yǔ)言社區(qū)2023年9月最新的排行榜,在30多年的發(fā)展中,C/C++幾乎一致穩(wěn)居前5!
TIOBE 編程語(yǔ)言社區(qū)排行榜是編程語(yǔ)言流行趨勢(shì)的一個(gè)指標(biāo),每月更新,這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、 課程和第三方廠商的數(shù)量。排名使用著名的搜索引擎(諸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)進(jìn)行計(jì)算。
注意:排名不能說(shuō)明那個(gè)語(yǔ)言好,那個(gè)不好,每門(mén)編程語(yǔ)言都有適應(yīng)自己的應(yīng)用場(chǎng)景
3.2 在工作領(lǐng)域
- 操作系統(tǒng)以及大型系統(tǒng)軟件開(kāi)發(fā)
?所有操作系統(tǒng)幾乎都是C/C++寫(xiě)的,許多大型軟件背后幾乎都是C++寫(xiě)的,比如:Photoshop、Office、JVM(Java虛擬機(jī))等,究其原因還是性能高,可以直接操控硬件。
- 服務(wù)器端開(kāi)發(fā)
?后臺(tái)開(kāi)發(fā):主要側(cè)重于業(yè)務(wù)邏輯的處理,即對(duì)于前端請(qǐng)求后端給出對(duì)應(yīng)的響應(yīng),現(xiàn)在主流采用java,但內(nèi)卷化比較嚴(yán)重,大廠可能會(huì)有C++后臺(tái)開(kāi)發(fā),主要做一些基礎(chǔ)組件,中間件、緩存、分布式存儲(chǔ)等。服務(wù)器端開(kāi)發(fā)比后臺(tái)開(kāi)發(fā)跟廣泛,包含后臺(tái)開(kāi)發(fā),一般對(duì)實(shí)時(shí)性要求比較高的,比如游戲服務(wù)器、流媒體服務(wù)器、網(wǎng)絡(luò)通訊等都采用C++開(kāi)發(fā)的。
- 游戲開(kāi)發(fā)
?PC平臺(tái)幾乎所有的游戲都是C++寫(xiě)的,比如:魔獸世界、傳奇、CS、跑跑卡丁車(chē)等,市面上相當(dāng)多的游戲引擎都是基于C++開(kāi)發(fā)的,比如:Cocos2d、虛幻4、DirectX等。三維游戲領(lǐng)域計(jì)算量非常龐大,底層的數(shù)學(xué)全都是矩陣變換,想要畫(huà)面精美、內(nèi)容豐富、游戲?qū)崟r(shí)性搞,這些高難度需求無(wú)疑只能選C++語(yǔ)言。比較知名廠商:騰訊、網(wǎng)易、完美世界、巨人網(wǎng)絡(luò)等。
- 嵌入式和物聯(lián)網(wǎng)領(lǐng)域
?嵌入式:就是把具有計(jì)算能力的主控板嵌入到機(jī)器裝置或者電子裝置的內(nèi)部,能夠控制這些裝置。比如:智能手環(huán)、攝像頭、掃地機(jī)器人、智能音響等。
?談到嵌入式開(kāi)發(fā),大家最能想到的就是單片機(jī)開(kāi)發(fā)(即在8位、16位或者32位單片機(jī)產(chǎn)品或者裸機(jī)上進(jìn)行的開(kāi)發(fā)),嵌入式開(kāi)發(fā)除了單片機(jī)開(kāi)發(fā)以外,還包含在soc片上、系統(tǒng)層面、驅(qū)動(dòng)層面以及應(yīng)用、中間件層面的開(kāi)發(fā)。
?常見(jiàn)的崗位有:嵌入式開(kāi)發(fā)工程師、驅(qū)動(dòng)開(kāi)發(fā)工程師、系統(tǒng)開(kāi)發(fā)工程師、Linux開(kāi)發(fā)工程師、固件開(kāi)發(fā)工程師等。
?知名的一些廠商,比如:以華為、vivo、oppo、小米為代表的手機(jī)廠;以紫光展銳、樂(lè)鑫為代表的芯片廠;以大疆、海康威視、大華、CVTE等具有自己終端業(yè)務(wù)廠商;以及海爾、海信、格力等傳統(tǒng)家電行業(yè)。
?隨著5G的普及,物聯(lián)網(wǎng)(即萬(wàn)物互聯(lián),)也成為了一種新興勢(shì)力,比如:阿里lot、騰訊lot、京東、百度、美團(tuán)等都有硬件相關(guān)的事業(yè)部。
- 數(shù)字圖像處理
?數(shù)字圖像處理中涉及到大量數(shù)學(xué)矩陣方面的運(yùn)算,對(duì)CPU算力要求比較高,主要的圖像處理算法庫(kù)和開(kāi)源庫(kù)等都是C/C++寫(xiě)的,比如:OpenCV、OpenGL等,大名鼎鼎的Photoshop就是C++寫(xiě)的。
- 人工智能
?一提到人工智能,大家首先想到的就是python,認(rèn)為學(xué)習(xí)人工智能就要學(xué)習(xí)python,這個(gè)是誤區(qū),python中庫(kù)比較豐富,使用python可以快速搭建神經(jīng)網(wǎng)絡(luò)、填入?yún)?shù)導(dǎo)入數(shù)據(jù)就可以開(kāi)始訓(xùn)練模型了。但人工智能背后深度學(xué)習(xí)算法等核心還是用C++寫(xiě)的。
- 分布式應(yīng)用
?近年來(lái)移動(dòng)互聯(lián)網(wǎng)的興起,各應(yīng)用數(shù)據(jù)量業(yè)務(wù)量不斷攀升;后端架構(gòu)要不斷提高性能和并發(fā)能力才能應(yīng)對(duì)大信息時(shí)代的來(lái)臨。在分布式領(lǐng)域,好些分布式框架、文件系統(tǒng)、中間組件等都是C++開(kāi)發(fā)的。對(duì)分布式計(jì)算影響極大的Hadoop生態(tài)的幾個(gè)重量級(jí)組件:HDFS、zookeeper、HBase等,也都是基于Google用C++實(shí)現(xiàn)的GFS、Chubby、BigTable。包括分布式計(jì)算框架MapReduce也是Google先用C++實(shí)現(xiàn)了一套,之后才有開(kāi)源的java版本。
除了上述領(lǐng)域外,在:科學(xué)計(jì)算、瀏覽器、流媒體開(kāi)發(fā)、網(wǎng)絡(luò)軟件等都是C++比較適合的場(chǎng)景,作為一名老牌語(yǔ)言的常青樹(shù),C++一直霸占編程語(yǔ)言前5名,肯定有其存在的價(jià)值。
四、如何學(xué)習(xí)C++
4.1 大佬怎么學(xué)?
以下引用自2010年8月號(hào)《程序員》刊登的拙文《C++強(qiáng)大背后》最后一段:
?C++缺點(diǎn)之一,是相對(duì)許多語(yǔ)言復(fù)雜,而且難學(xué)難精。許多人說(shuō)學(xué)習(xí)C語(yǔ)言只需一本K&R《C程序設(shè)計(jì)語(yǔ)言》即可,但C++書(shū)籍卻是多不勝數(shù)。我是從C進(jìn)入C++,皆是靠閱讀自學(xué)。在此分享一點(diǎn)學(xué)習(xí)心得。個(gè)人認(rèn)為,學(xué)習(xí)C++可分為4個(gè)層次:
-
第一個(gè)層次,C++基礎(chǔ) (平平常常)
?挑選一本入門(mén)書(shū)籍,如《C++ Primer》、《C++大學(xué)教程》或Stroustrup撰寫(xiě)的經(jīng)典《C++程序設(shè)計(jì)語(yǔ)言》或他一年半前的新作《C++程序設(shè)計(jì)原理與實(shí)踐》,而一般C++課程也止于此,另外《C++ 標(biāo)準(zhǔn)程序庫(kù)》及《The C++ Standard Library Extensions》可供參考。 -
第二個(gè)層次,正確高效的使用C++ (駕輕就熟)
?此層次開(kāi)始必須自修,閱讀過(guò)《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++編程規(guī)范》等,才適宜踏入專(zhuān)業(yè)C++開(kāi)發(fā)之路。 -
第三個(gè)層次,深入解讀C++ (出神入化)
?關(guān)于全局問(wèn)題可讀《深入探索C++對(duì)象模型》、《Imperfect C++》、《C++沉思錄》、《STL源碼剖析》,要挑戰(zhàn)智商,可看關(guān)于模版及模版元編程的書(shū)籍如《C++ Templates》、《C++設(shè)計(jì)新思維》、《C++模版元編程》。 -
第四個(gè)層次,研究C++ (返璞歸真)
?閱讀《C++語(yǔ)言的設(shè)計(jì)和演化》、《編程的本質(zhì)》(含STL設(shè)計(jì)背后的數(shù)學(xué)根基)、C++標(biāo)準(zhǔn)文件《ISO/IEC 14882:2003》****、C++標(biāo)準(zhǔn)委員會(huì)的提案書(shū)和報(bào)告書(shū)、關(guān)于C++的學(xué)術(shù)文獻(xiàn)。由于我主要是應(yīng)用C++,大約只停留于第二、三個(gè)層次。然而,C++只是軟件開(kāi)發(fā)的一環(huán)而已,單憑語(yǔ)言并不能應(yīng)付業(yè)務(wù)和工程上的問(wèn)題。建議讀者不要強(qiáng)求幾年內(nèi)“徹底學(xué)會(huì)C++的知識(shí)”,到達(dá)第二層左右便從工作實(shí)戰(zhàn)中汲取經(jīng)驗(yàn),有興趣才慢慢繼續(xù)學(xué)習(xí)更高層次的知識(shí)。 雖然學(xué)習(xí)C++有難度,但也是相當(dāng)有趣且有滿(mǎn)足感的。
http://www.zhihu.com/question/23933514
上述是一些資深程序員對(duì)于21天學(xué)通C++的調(diào)侃。建議不要把「精通C++」作為一個(gè)一年目標(biāo),應(yīng)該要把學(xué)習(xí)語(yǔ)言作為一個(gè)持續(xù)的過(guò)程,同時(shí)要把語(yǔ)言運(yùn)用在具體的應(yīng)用場(chǎng)合中
“編程能力和變成年齡”
4.2 自己怎么學(xué)
網(wǎng)上一直流傳著“C++是最難的編程語(yǔ)言之一”,很不幸這是真的。但無(wú)需焦慮,雖然C++語(yǔ)法特性繁瑣復(fù)雜,經(jīng)典書(shū)籍琳瑯滿(mǎn)目,但是只要你努力,你也可以“前途光明”。
接下來(lái)我將想你介紹如何學(xué)習(xí)C++!
學(xué)C++就三個(gè)點(diǎn):多總結(jié)、??磿?shū)和刷題。最后一個(gè)就不談了,學(xué)啥都需要。有人會(huì)問(wèn),前兩個(gè)不都一樣嗎?
說(shuō)到這就有得談了。由于C++是在C的基礎(chǔ)上發(fā)展起來(lái)的、雖然解決了C的很多缺陷。但由于歷史原因以及C++發(fā)展之初還是一窮二白,在發(fā)展過(guò)程中必然會(huì)埋下了很多坑。有人會(huì)問(wèn)經(jīng)過(guò)這么多年發(fā)展,為什么不把坑填好?說(shuō)到這就不得提另一個(gè)故事了:由于Python2.0存在設(shè)計(jì)缺陷和不一致性等重大問(wèn)題,Python委員會(huì)于2008年推出了Python3.0,但此版本和python2.0不兼容,導(dǎo)致當(dāng)時(shí)Python委員會(huì)被集體攻擊,過(guò)了5~6年才緩過(guò)來(lái)。所以語(yǔ)言的優(yōu)化一般還是會(huì)兼容老版本的,這導(dǎo)致C++有很多坑和細(xì)節(jié)需要我們注意,總結(jié)也為之重要。
最后就是老問(wèn)題了,要不要看書(shū)。和C語(yǔ)言以及數(shù)據(jù)結(jié)構(gòu)等不同,他們大多只需要了解其相關(guān)語(yǔ)法會(huì)用就行,不看書(shū)也能學(xué)好。但C++就不同了,由于C++接近底層,非常靈活,是否看書(shū)差距非常大。(博主點(diǎn)到為止,就不多說(shuō)了,這里博主在提下C++3本必讀的經(jīng)典書(shū)籍《Effective C++》、《C Primer》(當(dāng)語(yǔ)法詞典用)、《STL源碼剖析》。3本書(shū)非常重要?。。。?/p>
下面就簡(jiǎn)單看看每部分具體如何做吧!
-
多總結(jié)
-
寫(xiě)博客
經(jīng)常寫(xiě)博客不僅可以記錄自己學(xué)習(xí)的歷程,知識(shí)點(diǎn)的認(rèn)識(shí),更是復(fù)習(xí)的一把神兵利器 - 中后期畫(huà)思維導(dǎo)圖總結(jié)
-
寫(xiě)博客
-
??磿?shū)
在網(wǎng)上經(jīng)常看到有人推薦初學(xué)者《C Primer》。不可否認(rèn)這是本好書(shū),但還是不適合初學(xué)者。-
初窺門(mén)徑
入門(mén)階段,找一本簡(jiǎn)單、薄一點(diǎn)的書(shū)快速入門(mén),上述兩本都可以。博主推薦《高質(zhì)量程序設(shè)計(jì)指南》就挺適合的,可以簡(jiǎn)單快速了解C++的語(yǔ)法特性。 -
潛心修行
當(dāng)C++學(xué)習(xí)過(guò)半之后,大概繼承和多態(tài)學(xué)完,建議看下《Effective C++》,該書(shū)**以建議的方式告訴你如何寫(xiě)出更好的C++程序,看和不看差別非常大**。
C++課程系統(tǒng)學(xué)完后,有時(shí)間可以看下《C++編程思想》對(duì)講過(guò)的知識(shí)點(diǎn)融會(huì)貫通,該本書(shū)有一定深度,從原理方面對(duì)C++語(yǔ)法進(jìn)行介紹。
《C++ Prime》可以當(dāng)成工具書(shū)對(duì)待,有不清楚的語(yǔ)法特性可以快速去查,建議工作之后可以利用閑暇時(shí)間慢慢品味下-
深入淺出
這兩本書(shū)都有一定難度,如果基礎(chǔ)知識(shí)掌握不扎實(shí),不建議看,強(qiáng)烈建議好好把基礎(chǔ)知識(shí)打扎實(shí)。
《STL源碼剖析》將六大組件逐一剖析,看完之后對(duì)STL的設(shè)計(jì)框架以及內(nèi)部實(shí)現(xiàn)原理有更深的認(rèn)識(shí),面試時(shí)可以游刃有余和面試官交鋒。
《深度探索C++對(duì)象模型》會(huì)讓你對(duì)C++語(yǔ)法設(shè)計(jì)原理有更深層次的認(rèn)識(shí),有些疑惑的知識(shí)點(diǎn)看完之后里面就清晰了。
-
初窺門(mén)徑
-
勤刷題
- ??途W(wǎng)
- LeetCode
好了,本篇博客到此就結(jié)束了,希望對(duì)你有幫助。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-718143.html
C++相關(guān)優(yōu)質(zhì)入門(mén)文章:淺談CPP彌補(bǔ)了C的哪些缺陷文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718143.html
到了這里,關(guān)于天選之子C++是如何發(fā)展起來(lái)的?如何學(xué)習(xí)C++呢?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!