做爰免費(fèi)時(shí)看視頻澳門網(wǎng)站網(wǎng)站seo優(yōu)化教程
引言
其實(shí)C++基礎(chǔ)語法基本上已經(jīng)學(xué)完,早就想開始寫C++的博客了,卻因?yàn)槠渌鞣N事情一直沒開始。原計(jì)劃是想講Linux系統(tǒng)虛擬機(jī)安裝的,后來考慮了一下還是算了,等Linux學(xué)到一定程度再開始相關(guān)博客的寫作和發(fā)表吧。今天寫博客想給C++開個頭,講講關(guān)于C++發(fā)展史以及C++應(yīng)用領(lǐng)域之類的東西,再淺談下如何學(xué)習(xí)C++,那么就開始我們的內(nèi)容吧。
什么是C++
C語言是結(jié)構(gòu)化和模塊化的語言,適合處理較小規(guī)模的程序。對于復(fù)雜的問題,規(guī)模較大的程序,需要高度的抽象和建模時(shí),C語言則不合適。為了解決軟件危機(jī), 20世紀(jì)80年代, 計(jì)算機(jī)界提出了OOP(objectoriented programming:面向?qū)ο?思想,支持面向?qū)ο蟮某绦蛟O(shè)計(jì)語言應(yīng)運(yùn)而生。
1982年,丹麥計(jì)算機(jī)科學(xué)家,Bjarne Stroustrup博士(咱們C++的祖師爺)在C語言的基礎(chǔ)上引入并擴(kuò)充了面向?qū)ο蟮母拍?#xff0c;發(fā)明了一種新的程序語言。為了表達(dá)該語言與C語言的淵源關(guān)系,命名為C++。因此:C++是基于C語言而產(chǎn)生的,它既可以進(jìn)行C語言的過程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類型為特點(diǎn)的基于對象的程序設(shè)計(jì),還可以進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。
這里想告訴大家一件事,我發(fā)現(xiàn)周圍人很多人認(rèn)為C和C++是一個東西,但是我在此聲明:
C 和 C++是兩個不同的語言!!!
C++發(fā)展史
1979年,貝爾實(shí)驗(yàn)室的本賈尼等人試圖分析unix內(nèi)核的時(shí)候,試圖將內(nèi)核模塊化,于是在C語言的基礎(chǔ)上進(jìn)行擴(kuò)展,增加了類的機(jī)制,完成了一個可以運(yùn)行的預(yù)處理程序,稱之為C with classes。
C with classes便是C++的前身,C++語言也是在C的基礎(chǔ)上一步步擴(kuò)展過來的,最終形成了一個全新的編程語言。
階段 | 內(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ū)ο?#xff0c;新增保護(hù)成員,多態(tài)繼承,對象的初始化,抽象類,靜態(tài)成員以及const成員函數(shù) |
C++3.0 | 進(jìn)一步完事,引入模板,解決多繼承產(chǎn)生的二義性問題和相應(yīng)構(gòu)造和析構(gòu)處理 |
C++98 | C++標(biāo)準(zhǔn)的第一個版本,絕大多數(shù)數(shù)編譯器都支持,得到了國際標(biāo)準(zhǔn)化組織(ISO)和美國標(biāo)準(zhǔn)化協(xié)會的認(rèn)可,以模板的方式重寫C++標(biāo)準(zhǔn)庫,引入了STL(標(biāo)準(zhǔn)庫模板) |
C++03 | C++標(biāo)準(zhǔn)第二個版本,語言特性無大改變,主要:修訂錯誤、減少多異性 |
C++05 | C++標(biāo)準(zhǔn)委員會發(fā)布了一份計(jì)數(shù)報(bào)告(Technical Report,TR1),正式更名C++0x,即:計(jì)劃在本世紀(jì)第一個10年的某個時(shí)間發(fā)布 |
C++11 | 增加了許多特性,使得C++更像一種新語言,比如:正則表達(dá)式、基于范圍for循環(huán)、auto關(guān)鍵字、新容器、列表初始化、標(biāo)準(zhǔn)線程庫等 |
C++14 | 對C++11的擴(kuò)展,主要是修復(fù)C++11中漏洞以及改進(jìn),比如:泛型的lambda表達(dá)式,auto的返回值類型推導(dǎo),二進(jìn)制字面常量等 |
C++17 | 在C++11上做了一些小幅改進(jìn),增加了19個新特性,比如:static_assert()的文本信息可選,Fold表達(dá)式用于可變的模板,if和switch語句中的初始化器等 |
C++20 | 自C++11以來最大的發(fā)行版,引入了許多新的特性,比如:模塊(Modules)、協(xié)程 (Coroutines)、范圍(Ranges)、概念(Constraints)等重大特性,還有對已有特性的更新:比如Lambda支持模板、范圍for支持初始化等 |
C++20 | 制定ing,預(yù)期會完善標(biāo)準(zhǔn)庫STL,以及一些新功能 |
C++還在不斷的向后發(fā)展。但是:現(xiàn)在公司主流使用還是C++98和C++11,所有大家不用追求最新,重點(diǎn)將C++98和C++11掌握好
關(guān)于C++2X最新特性的討論:
C++23的目標(biāo) - 知乎
C++的重要性
關(guān)于語言使用的廣度
下圖數(shù)據(jù)來自TIOBE編程語言社區(qū)2024年2月最新的排行榜,在30的發(fā)展,C++穩(wěn)居前位,目前霸榜語言榜前三。
TIOBE 編程語言社區(qū)排行榜是編程語言流行趨勢的一個指標(biāo),每月更新,這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的程序員、 課程和第三方廠商的數(shù)量。排名使用著名的搜索引擎(諸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)進(jìn)行計(jì)算。
注:排名不能說明那個語言好,那個不好,每門編程語言都有適應(yīng)自己的應(yīng)用場景。
在工作領(lǐng)域中
1.操作系統(tǒng)以及大型系統(tǒng)軟件開發(fā)
所有操作系統(tǒng)幾乎都是C/C++寫的,許多大型軟件背后幾乎都是C++寫的,比如:Photoshop、
Office、JVM(Java虛擬機(jī))等,究其原因還是性能高,可以直接操控硬件。
2.服務(wù)端開發(fā)
后臺開發(fā):主要側(cè)重于業(yè)務(wù)邏輯的處理,即對于前端請求后端給出對應(yīng)的響應(yīng),現(xiàn)在主流采用java,但內(nèi)卷化比較嚴(yán)重,大廠可能會用C++后臺開發(fā),主要做一些基礎(chǔ)組件,中間件、緩存、分布式存儲等。服務(wù)器端開發(fā)比后臺開發(fā)跟廣泛,包含后臺開發(fā),一般對實(shí)時(shí)性要求比較高的,比如游戲服務(wù)器、流媒體服務(wù)器、網(wǎng)絡(luò)通訊等都采用C++開發(fā)的。
3.游戲開發(fā)
PC平臺幾乎所有的游戲都是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ò)等。
4.嵌入式和物聯(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ū)動層面以及應(yīng)用、中間件層面的開發(fā)。常見的崗位有:嵌入式開發(fā)工程師、驅(qū)動開發(fā)工程師、系統(tǒng)開發(fā)工程師、Linux開發(fā)工程師、固件開發(fā)工程師等。
知名的一些廠商,比如:以華為、vivo、oppo、小米為代表的手機(jī)廠;以紫光展銳、樂鑫為代表的芯片廠;以大疆、??低?、大華、CVTE等具有自己終端業(yè)務(wù)廠商;以及海爾、海信、格力等傳統(tǒng)家電行業(yè)。隨著5G的普及,物聯(lián)網(wǎng)(即萬物互聯(lián),)也成為了一種新興勢力,比如:阿里lot、騰訊lot、京東、百度、美團(tuán)等都有硬件相關(guān)的事業(yè)部。
5.數(shù)字圖像處理
數(shù)字圖像處理中涉及到大量數(shù)學(xué)矩陣方面的運(yùn)算,對CPU算力要求比較高,主要的圖像處理算法庫和開源庫等都是C/C++寫的,比如:OpenCV、OpenGL等,大名鼎鼎的Photoshop就是C++寫的
6.人工智能
一提到人工智能,大家首先想到的就是python,認(rèn)為學(xué)習(xí)人工智能就要學(xué)習(xí)python,這個是誤區(qū),
python中庫比較豐富,使用python可以快速搭建神經(jīng)網(wǎng)絡(luò)、填入?yún)?shù)導(dǎo)入數(shù)據(jù)就可以開始訓(xùn)練模型
了。但人工智能背后深度學(xué)習(xí)算法等核心還是用C++寫的。
7.分布式應(yīng)用
近年來移動互聯(lián)網(wǎng)的興起,各應(yīng)用數(shù)據(jù)量業(yè)務(wù)量不斷攀升;后端架構(gòu)要不斷提高性能和并發(fā)能力才能應(yīng)對大信息時(shí)代的來臨。在分布式領(lǐng)域,好些分布式框架、文件系統(tǒng)、中間組件等都是C++開發(fā)的。對分布式計(jì)算影響極大的Hadoop生態(tài)的幾個重量級組件: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++比較適合的場景。
如何學(xué)習(xí)C++
學(xué)習(xí)C++語法非常繁雜,要學(xué)好,就要有足夠的耐心,在學(xué)習(xí)某些語法時(shí),可以先不求甚解,當(dāng)往后學(xué)到一定程度再深入,你會發(fā)現(xiàn)其中設(shè)計(jì)的合理性,豁然開朗。
C++思維導(dǎo)圖
推薦書籍
看書需要有耐心,不過我還是建議帶上網(wǎng)課去進(jìn)行學(xué)習(xí)更容易接受一些
1.C++自學(xué)入門
入門階段,如果想要自學(xué)入門,這本書非常適合,循序漸進(jìn),不會一下子進(jìn)入C++難點(diǎn)之一:類和對象,同時(shí),沒學(xué)過C語言同樣可以通過這本書入門C++。
2.進(jìn)階
當(dāng)C++學(xué)習(xí)過半之后,大概繼承和多態(tài)學(xué)完,建議看下《Effective C++》,該書以建議的方式告訴
你如何寫出更好的C++程序,看和不看差別非常大。
C++系統(tǒng)學(xué)完后,有時(shí)間可以看下《C++編程思想》對講過的知識點(diǎn)融會貫通,該本書有一定
深度,從原理方面對C++語法進(jìn)行介紹。
《C++ Prime》可以當(dāng)成工具書對待,有不清楚的語法特性可以快速去查。
3.深入淺出
這兩本書都有一定難度,如果基礎(chǔ)知識掌握不扎實(shí),不建議看,強(qiáng)烈建議好好把基礎(chǔ)知識打扎實(shí)。
《STL源碼剖析》將六大組件逐一剖析,看完之后對STL的設(shè)計(jì)框架以及內(nèi)部實(shí)現(xiàn)原理有更深的認(rèn)
識,面試時(shí)可以游刃有余和面試官交鋒。
《深度探索C++對象模型》會讓你對C++語法設(shè)計(jì)原理有更深層次的認(rèn)識,有些疑惑的知識點(diǎn)看完
之后里面就清晰了。
最后就是,學(xué)好任何語言都需要的一點(diǎn),就是:
多刷題!!!
多刷題!!!
多刷題!!!
如果你很聰明,想深入算法和思考難題的感覺,可以去刷洛谷/codeforce。
洛谷是國內(nèi)的一個較知名oj平臺,codeforces是俄羅斯的一個oj平臺(里面的題都是英文)
首頁 - 洛谷 | 計(jì)算機(jī)科學(xué)教育新生態(tài) (luogu.com.cn)
Codeforces
如果你急于訓(xùn)練語法,面臨就業(yè),更喜歡描述簡練,核心內(nèi)容突出的題,可以去嘗試leetcode
LeetBook - 力扣(LeetCode)全球極客摯愛的技術(shù)成長平臺
結(jié)語
關(guān)于C++的內(nèi)容還有很多,不限于今天和后面所講到的,C++更像一門藝術(shù)哲學(xué),需要大家在學(xué)習(xí)使用的過程中細(xì)心的領(lǐng)悟和體會。今后我會分享我學(xué)習(xí)過程中學(xué)到的C++語法和細(xì)節(jié)相關(guān)的內(nèi)容,愛好C++和感興趣的朋友可以多多關(guān)注。
Dev-C++ 和 VS上都可以使用C++代碼,注意添加后綴.cpp哦。我樣也寫了如何在vdcode上運(yùn)行C++代碼的博客,感興趣的朋友可以看看:VSCode上搭建C/C++開發(fā)環(huán)境(vscode配置c/c++環(huán)境)Windows系統(tǒng)---保姆級教程 ForcibleBugMaker??????-CSDN博客
最后以一份代碼來開啟C++之旅吧!
//display a message
#include<iostream>
int main()
{std::cout << "hello C++" << std::endl;return 0;
}