你真的了解C++嗎?

姓名:李偉? ? ? ? 學號:16050120047

轉載自http://news.51cto.com/art/201712/559667.htm,有刪節(jié)。

【嵌牛導讀】:C++作為一門重要的語言,是C語言的進一步發(fā)展,在如今,C++也成為了程序員必須掌握的程序語言。

【嵌牛鼻子】:C++,C,程序庫

【嵌牛提問】:你對C++到底了解多少?

【嵌牛正文】:

C++的初衷

1)早期C++許多的工作是對于C的強化和凈化,并把完全兼容C作為強制性要求。C89、C99中許多的改進正是從C++中所引進。可見,Stroustrup對C語言的貢獻非常之大。今天不管你對C++怎么看,C++的確擴展和進化了C,對C造成了深遠的影響。

2)在C++兼容C的過程中遇到了不少設計實現(xiàn)上的麻煩;以及守舊的K&R C程序員對Stroustrup的批評。很多人說C++的惡夢惡夢就是要去兼容于C,這并不無道理(Java就干的比C++徹底得多),但這并不是Stroustrup考慮的,Stroustrup一邊在使盡渾身解數(shù)來兼容C,另一方面在拼命地優(yōu)化C。

3)C++最大的競爭對手正是C,他的目的就是——C能做到的,C++也必須做到,而且要做的更好。大家覺得是不是做到了?有多少做到了,有多少還沒有做到?

4)對于同時關注的運行效率和開發(fā)效率的程序員,Stroustrup多次強調C++的目標是——“在保證效率與C語言相當?shù)那闆r下,加強程序的組織性;能保證同樣功能的程序,C++更短小”,這正是淺封裝的核心思想。而不是過渡設計的OO。(參看:面向對象是個騙局)

5)《C++演化和設計》這本書中舉了很多例子來回應那些批評C++有運行性能問題的人。C++在其第二個版本中,引入了虛函數(shù)機制,這是C++效率最大的瓶頸了,但我個人認為虛函數(shù)就是多了一次加法運算,但讓我們的代碼能有更好的組織,極大增加了程序的閱讀和降底了維護成本。(注:Lippman的《深入探索C++對象模型》也說明了C++不比C的程序在運行性能低。Bruce的《Think in C++》也說C++和C的性能相差只有5%)

6)這本書中還講了一些C++的痛苦的取舍,印象最深的就是多重繼承,提出,拿掉,再被提出,反復很多次,大家在得與失中不斷地辯論和取舍。這個過程讓我最大的收獲是——a) 對于任何一種設計都有好有壞,都只能偏重一方,b) 完全否定式的批評是不好的心態(tài),好的心態(tài)應該是建設性地批評。

C++有多少坑

個人覺得C++的坑其實并不多,因為C++太靈活了,想怎么搞就怎么搞,所以,各種不經意地濫用和亂搞。某些人C和C++都沒學好,大多數(shù)人用C++寫C,所以,C的坑和C++的坑合并了。如果你能花兩到三周的時候讀一下《Effecitve C++》里的那50多個條款,你就知道C++里的坑并不多,而且,有很多條款告訴我們C++是怎么解決C的坑的。然后,你可以讀讀《Exceptional C++》和《More Exceptional C++》,你可以了解一下C++各種問題的解決方法和一些常見的經典錯誤。

C++在解決了很多C語的坑的同時,也因為OO和泛型又引入了一些坑。消一些,加一些,我個人感覺上總體上只比C多10%左右吧。但是你有了開發(fā)速度更快,代碼更易讀,更易維護的500%的利益。

C++的編譯對標準C++的實現(xiàn)各異,支持地也千差萬別,所以會有一些比較奇怪的問題,但是如果你一般用用C++的封裝,繼承,多態(tài),以及namespace,const, refernece, inline, templete, overloap, autoptr,還有一些OO 模式,并不會出現(xiàn)奇怪的問題。

而對于STL中的各種坑,我覺得是程序員們還對GP(泛型編程)理解得還不夠,STL是泛型編程的頂級實踐!屬于是大師級的作品,一般人很難理解。必需承認STL寫出來的代碼和編譯錯誤的確相當復雜晦澀,太難懂了。這也是C++的一個詬病。

C++是一門很恐怖的語言,而比它更恐怖的是很多不合格的程序員在使用著它。

很多編程大牛對C++的感情波動是:先是喜歡地要死,然后是恨地要死,最是的又愛又恨,愛的是這個語言,恨的是很多不合格的人在濫用和凌辱它。

C++的未來

C++語言發(fā)展大概可以分為三個階段(摘自Wikipedia):

第一階段:

這一階段C++語言基本上是傳統(tǒng)類型上的面向對象語言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當大份額;

第二階段:

這一階段由于標準模板庫(STL)和后來的Boost等程式庫的出現(xiàn),泛型程式設計在C++中占據(jù)了越來越多的比重性。當然,同時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下降,C++受到了一定的沖擊;

第三階段:

以Loki、MPL等程式庫為代表的產生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術的出現(xiàn)以及和原有技術的融合,使C++已經成為當今主流程式設計語言中最復雜的一員。

在《Why C++? 王者歸來》中說了 ,性能主要就是要省電,省電就是省錢,在數(shù)據(jù)中心還不明顯,在手機上就更明顯了,這就是為什么Android 支持C++的原因。所以,在NB的電池或是能源出現(xiàn)之前,如果你需要注重程序的運行性能和開發(fā)效率,并更關注程序的運性能,那么,應該首選 C++。這就是iOS開發(fā)也支持C++的原因。

今天的C++11中不但有更多更不錯的東西,而且,還填了更多原來C++的坑。

? ? ? ? 總之,C++并不完美,但學C++必然讓你受益無窮。是那些不合格的、想對編程速成的程序員讓C++變得坑多。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容