您的位置:首頁>設計>正文

你用C++踩過多少坑?程式設計業界大牛帶你瞭解真正的C++

C++的初衷

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

2)在C++相容C的過程中遇到了不少設計實現上的麻煩;以及守舊的K&R C程式師對Stroustrup的批評。 很多人說C++的惡夢惡夢就是要去相容於C, 這並不無道理(Java就幹的比C++徹底得多), 但這並不是Stroustrup考慮的, Stroustrup一邊在使盡渾身解數來相容C, 另一方面在拼命地優化C。

3)C++最大的競爭對手正是C, 他的目的就是——C能做到的, C++也必須做到, 而且要做的更好。

大家覺得是不是做到了?有多少做到了, 有多少還沒有做到?

4)對於同時關注的運行效率和開發效率的程式師, Stroustrup多次強調C++的目標是——“在保證效率與C語言相當的情況下, 加強程式的組織性;能保證同樣功能的程式, C++更短小”, 這正是淺封裝的核心思想。 而不是過渡設計的OO。 (參看:物件導向是個騙局)

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

Bruce的《Think in C++》也說C++和C的性能相差只有5%)

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

C++有多少坑

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

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

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

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

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

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


C++的未來

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

第一階段:

這一階段C++語言基本上是傳統類型上的物件導向語言, 並且憑藉著接近C語言的效率, 在工業界使用的開發語言中佔據了相當大份額;

第二階段:

這一階段由於標準範本庫(STL)和後來的Boost等程式庫的出現, 泛型程式設計在C++中佔據了越來越多的比重性。 當然, 同時由於Java、C#等語言的出現和硬體價格的大規模下降, C++受到了一定的衝擊;

第三階段:

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

在《Why C++? 王者歸來》中說了 , 性能主要就是要省電, 省電就是省錢,在資料中心還不明顯,在手機上就更明顯了,這就是為什麼Android 支持C++的原因。所以,在NB的電池或是能源出現之前,如果你需要注重程式的運行性能和開發效率,並更關注程式的運性能,那麼,應該首選 C++。這就是iOS開發也支援C++的原因。

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

總結

C++並不完美,但學C++必然讓你受益無窮。是那些不合格的、想對程式設計速成的程式師讓C++變得坑多。如果你想成為一個真正使用C++的程式師而不是一個讓C++變的更加坑的程式師的話可以加入小編的C/C++群。希望和大家一起成長提升自己的技術能力的話,那你就來吧。627819188

省電就是省錢,在資料中心還不明顯,在手機上就更明顯了,這就是為什麼Android 支持C++的原因。所以,在NB的電池或是能源出現之前,如果你需要注重程式的運行性能和開發效率,並更關注程式的運性能,那麼,應該首選 C++。這就是iOS開發也支援C++的原因。

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

總結

C++並不完美,但學C++必然讓你受益無窮。是那些不合格的、想對程式設計速成的程式師讓C++變得坑多。如果你想成為一個真正使用C++的程式師而不是一個讓C++變的更加坑的程式師的話可以加入小編的C/C++群。希望和大家一起成長提升自己的技術能力的話,那你就來吧。627819188

Next Article
喜欢就按个赞吧!!!
点击关闭提示