C++發展概述,以及作爲主流編程語言的優缺點及應用領域!

C++是一門以C爲基礎發展而來的一門面向對象的高級程序設計語言,從1983年由Bjarne Stroustrup教授在貝爾實驗室創立開始至今,已有30多個年頭。

C++從最初的C with class,經歷了從C++98、C++ 03、C++ 11、C++ 14再到C++17多次標準化改造,功能得到了極大的豐富,已經演變爲一門集面向過程、面向對象、函數式、泛型和元編程等多種編程範式的複雜編程語言,入門具有一定的難度。

由於C++過於複雜,並且經歷了長時間的發展演變,目前對於C++標準支持的較好主要有GNU C++和Visual C++,嚴格來說,目前還沒有一個完全支持ISO C++的版本。

1954年,John Backus發明了世界上第一種計算機高級語言Fortran,爲之後出現的高級編程語言奠定了基礎。

1970年,AT&T的Bell實驗室的 Ken Thompson,以BCPL語言爲基礎,設計出簡單且接近硬件的B語言(取BCPL的首字母),並且他用B語言寫了第一個Unix操作系統。

到了1972年,Bell實驗室的Dennis Ritchie和Ken Thompson共同發明了C語言,並使用C重寫Unix。

1979年,Bjame Stroustrup到了Bell實驗室,開始從事將C改良爲帶類的C(C with Classes)的工作,1983年該語言被正式命名爲C++,主要意圖是表明C++是C的增強版,1985年發佈了第一個C++版本。

第一個版本的C++,因其面向對象的思想使得編程變得簡單,並且又保持了C語言的運行效率,在推出的一段時間內,得到了快速的發展,佔據了編程語言界的半壁江山。

從1985年到1998年,C++從最初的C with Classes新增了很多其他的特性,比如異常處理、模板、標準模板庫(STL)、運行時異常處理(RTTI)與名字空間(Namespace)等。

1998年,C++標準委員會統籌C++的所有特性,發佈了第一個C++國際標準C++98。

從1998年到2003年,是C++標準從C++98到C++03的迭代期,期間C++擴增了很多額外的特性,比如以Boost MPL(Boost Metaprogramming Library)與Loki等爲代表的模板元編程庫的出現,讓開發者更加便捷的使用C++在編譯器的執行能力,即通過代碼編譯獲得計算結果,學術性的稱爲模板元編程。

到了2003年,C++標準委員會總結最新技術併發布了C++03標準。

從2003年到2011年,也就是從C++03到C++11,期間C++引入了對象移動、右值引用、lamba表達式(函數式編程)、編譯時類型識別(auto)、別名模板以及很多新型關鍵詞(如nullptr、decltype、constexpr)等現代編程語言常具備的能力,讓C++與時俱進,開發效率得到了很大的提升。這些新的特性隨着C++11標準的發佈而被正式確立下來。

近年來,C++標準的變更週期縮短,由C++11到C++14以及最近的C++17都只用了3年的時間。

C++14引入了二進制文字常量、將類型推導從Lambda函數擴展到所有函數、變量模板以及數字分位符等。

C++14 是對 C++11的重要補充和優化,是C++發展歷程中的一個小型版本,雖然新增的內容較少,但是仍然爲用戶“帶來了極大的方便”,爲實現使C++“對新手更爲友好”這一目標作出努力。

到了2017年,C++迎來了C++17標準。

此次對C++的改進和擴增,讓C++變得更加容易接受和便於使用了。

C++17引入了許多新的特性,比如類模板參數推導、UTF-8文字常量、fold表達式、新類型以及新的庫函數等。

 

C++仍在不斷的發展,下一個版本將是C++20,C++歷史上的標準變更如下。

年份C++ 標準名稱非正式名稱

語言的發展是一個逐步遞進的過程,C語言也不例外,C語言也有自己的標準。

C語言從1972誕生以來,先後經歷了K&R C、ANSI C、C89、C99和最新的C11標準的變更,其特性不斷豐富,功能不斷強大。

語言的發展也是相互促進和交融吸收的,C++是直接從C語言發展過來的,而C語言是從B語言發展過來的,B語言則是從BCPL發展而來,BCPL(Basic CPL)則從CPL發展而來,CPL則從ALGOL60演變而來。

每一門新語言的誕生以及後續的演變和發展,都站在了其他語言的肩膀之上,取其精華,棄其糟粕,讓語言變得更加的強大。

 

優缺點:

現在的趨勢是多語言混成編程,故本文是針對混合編程。

1、C++優勢:

1.1  性能優勢。

1.2  可進化性(可複用性),進化出本團隊順手的類庫。

 

2、C++小的優勢或疑似優勢:

2.1  “萬金油”。混合編程時代,“萬金油”價值小。

相對於其他的語言,C++具有它自己的優勢,主要體現在以下幾個方面:

    1、 C++實現了面向對象程序設計。在高級語言當中,處理運行速度是最快的,大部分的遊戲軟件,系統都是由C++來編寫的。

    2、 C++語言非常靈活,功能非常強大。如果說C語言的優點是指針,那麼C++的優點就是性能和類層次結構的設計。

    3、C++非常嚴謹、精確和數理化,標準定義很細緻。

    4、 C++語言的語法思路層次分明、相呼應;語法結構是顯式的、明確的。

    當然,這只是C++的一部分優勢,在運用過程中,我們會逐漸發現C++語言之美。

 

3、C++根本缺點:

難學。新手被指針搞死,

中手(約3年工作經驗)被stl標準庫和模板搞死,

高手(約5年工作經驗)被boost搞死。由於stl難懂,大量的項目禁用stl。

我曾經看了一段20行的stl代碼,看了30分鐘,發現兩行代碼(兩個for)就可以搞定。csdn有一個真實的案例,某個項目有了較多的boost,那人離職後,項目就費了。請一個boost高手的成本比重寫項目還高。

 

4、緩解的方法:

C++軟件工程師進一步分工:

a,新手主要負責界面,只需要會使用指針,無需管理指針。管理指針封裝在基礎庫中。

b,中手老手負責邏輯層。

c,專人負責與數據庫打交道。

 

5、C++非根本缺點:

5.1可理解性差。“難學”引起,其實熟悉stl的人看熟悉stl的人代碼很好理解。解決方法:

a,分成若干個庫,新手參與的庫,禁止或少用stl。

b,stl中的常用功能,重寫在一個新庫中,此庫可理解性最重要。

 

6、小缺點或不是缺點。

6.1.門檻高。新手無需用到指針管理、內存管理、線程管理,直接用stl的vector或MFC的CArray分配空間。內存管理、線程管理一個產品、項目只需要一個人會,就可以了。

6.2,開發效率低。如果有多年積累的基礎庫,開發效率反而高。因爲這些基礎庫,是非常適合當前團隊的。

6.3,初級程序員易犯錯誤。初級程序員,只有權限修改少量庫(以界面居多)。

 

相對與java和C

寬泛點來說,從結果角度上看C幾乎什麼都能做,C++幾乎什麼都能做好。但是從開發成本上說,很多情況下C/C++不是最好的選擇。眼下C最主要的使用領域應該是Unix繫系統的開發以及某些Unix繫系統的軟件的相關開發。C++恐怕還是遊戲開發。

作爲通用語言,可以適應各種類型的開發算是必備屬性(同理,Java其實也是幾乎什麼都能做,只是限制相對來說要大一點並且很多事情做不了那麼好)。

C/C++的規則比較寬泛,可以用來進行一些更貼近硬件的開發,而大部分C/C++開發環境也是這麼做的。這造成相對來說用C/C++開發往往對其他語言的依賴比較小。

C++方面,因爲C++還同時具有完整的元編程功能(雖然並不特別好用),使得在保證功能的前提下也是目前性能最高的語言沒有之一。

所以當開發一個軟件特別是對性能有需求的軟件的時候,就算別的開發語言都不能用,最後總還是有C++可以用。

對於熱愛編程的人來說,有一羣一起學習一起解答的小夥伴很重要!

小編有一個免費的C/C++編程學習交流俱樂部【點擊進入】

還有編程學習文件(源碼,零基礎教程,項目實戰教學視頻),歡迎初學者和正在進階中的小夥伴們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章