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