C++ 這門語言的優點體現在哪裡?


Question: On a scale from 1 to 10, how do you rate your understanding of C++?

Bjarne Stroustrup: 7

Updated 2014.03.06

此句出自《Deep C and C++》 Olve Maudal Jon Jagger

當時看到題目就想到這句話,就順手寫了下來


C++加上嚴格的codereview可以用來開除豬一樣的隊友,這是所有其他語言都不具備的功能


抬高門檻,提高程序員收入。


對於一個百科全書式的語言,優點就是其擁有的多種可能性。但是這同樣也是缺點,需要足夠的剋制力才不會迷失其中。


會無法忍受 public static void main,想使用類,又想用指針,又想跑的飛快,偶爾還可能插入一段彙編來做些奇怪的事情,喜歡一切都掌握在手裡的感覺,優化的時候很痛快,更多地是有理有據有辦法地優化,沒有垃圾回收在作怪(從這個角度看,這也是一種摧枯拉朽),又想這又想那最後自己成了奇葩。

於是會選擇c++這一奇葩,雖然選擇了它,但至今都認為這是屎一樣的語言,或許永遠也無法寫的像python有種摧枯拉朽的感覺,但是卻可以寫的很整齊,每一句都是有理由的,沒有一句是不過腦子寫出來的,是在雕琢代碼。

c++ python js lua 我都喜歡,自己一個人寫東西首選py,想掌控一切的時候會考慮c++,可惜自己寫自己的東西總是一個人,就我的情況來說還真沒有足夠的精力,而我又是個極其嫌麻煩的人,真是個遺憾。


適用性廣,編譯器和基礎設施、庫比較完善,可以較好的兼容遺留代碼,語言本身可以支持各種風格,可以很快識別出新手程序員……


強大在再nb的人用c++寫程序也難免踩坑。


在性能為先的前提下,C++對運行效率和開發效率做了很好的折衷。

本質上講,C++是為那種超大型項目而存在的。當某項目處於中小規模的時候,很多語言同樣可以勝任,甚至比C++做得更好。但是當你的軟體規模(複雜度,或者吞吐量的量級)到了一定的水平,目前現有的語言里基本上除了C++,很少有這樣的駕馭能力。

C++和C一樣,它的表達能力極其強大,唯一的限制只是編程者的能力。

我認為世界上的事情大致如此:過於厲害的事物,一般都不易駕馭。但當你真的能到達那樣的境界,片葉飛花亦能傷人。


有對比才有體會吧。我是拿 C++ 和 c# 這個嚴謹而 OO 程度非常高的語言對比,你可以看到兩種語言的設計宗旨的差異和特點:

說點 C++ 的特點:

(1)C++ 里字元和數字無縫銜接,char 和數字(number),是沒有任何差異的,你怎樣用它把它當什麼來用它就是什麼。C# 居然不行,非得要 Encoding 來轉或者顯示 Convert (還不一定是你要的結果),吐血!

(2)switch 語句在 C++ 里可以隨意貫穿(落下),c# 不行。你喜歡哪一個?

(3)C++ 引用 dll(靜態鏈接),只要拿來 h,lib,dll 這三個文件,直接 include 就可以用了。C# 要自己寫 pinvoke。。累不累啊。

(4)序列化和反序列化,C++ 里可以在內存和文件之間進行直接傳輸。C# 好像需要手工寫,或者要引封送 api,煩!

(5)C++ 可以把類實例聲明在棧上(構造也一併完成),非常便捷。C # 必須得寫賦值的 new ,(當然這裡還有點區別 c# 的內存管理策略也不把對象放在棧上)。

(6)C++ 比 C#(java 也是),少了一個抽象層(平台),也就是說,C++ 寫的 windows 程序,不需要裝 .net framework 。同時,運行程序的內存需求也遠小於後者。換句話說,在硬體比較垃圾的場合,前者的適應性更強。

那麼用 C# 的優點是什麼呢?

寫代碼的時候,基本不需要操心什麼內存和資源的問題。。。。。。這一條的差異性很大。總之,用 C# 寫代碼,你會感覺輕鬆很多,而用 C++ 寫代碼,真是操碎了心,很累的感覺。


C++ Applications


目前為止我最青睞的編程語言就是c++,主要有三大原因:

1 簡潔:

沒什麼廢話(當然前提是寫得好)

2 強大:

支持各種各樣的編程風格

通吃底層和高層

光是標準庫就提供了各種data structure,algorithm

3 優雅:

語言的設計及使用符合人的思維習慣,使用cpp解決問題猶如行雲流水。

以上三點是我覺得作為一門優秀的編程語言必須具備的三個特質。

光簡潔不夠強大不夠優雅不行,光強大不夠簡潔不夠優雅不行,光優雅不夠簡潔不夠強大不行,cpp當之無愧地全部做到了,感謝Bjarne Stroustrup及所有為cpp的進化無私奉獻的人們。


傳統的回答是;c++語言的優點在於更接近於底層,但是又不像彙編那麼難讀,又具備c沒有的面向對象。 這直接體現在那些為了追求運行速度、更小的內存資源消耗、更能體現編碼人員高智商高水平的演算法的應用程序上。


唔。

用 C++ 的人永遠不用擔心語言限制自己能力的發揮。

(當然隨之而來的是,只需要擔心自己智商不足就好。)


具有某些現代語言的特徵,同時又有傳統語言(比如C)接近的效率。


坑多,可以逼著你不斷學習

特性多,可以逼著你不斷學習

多編程泛型支持,可以逼著你不斷學習

壞處就是,不斷學習,哪裡有時間去學習其他,女朋友都沒時間交了。

學了個新特性,手痒痒想用用,what?C++模板可以支持元編程!wtf,C++模板元編程竟然是圖靈完備的!熱血沸騰去試試,結果寫代碼調試得臉都被抽腫了,累覺不愛,以後使用C++不整那些勞什子了,還是把它當C with Class用吧。


c++ 就是高考的數學,純粹是為了過濾低智商的


以前喜歡說『沒有垃圾語言,只有垃圾程序員』,後來被人用C++和Python打的臉都腫了。


任何語言的語法幾乎是C++語法的真子集,之所以說「幾乎」,是因為本人也未認真逐條考證。除了函數式編程語言如erlang,C++程序員轉過去的周期是1個月之內。這是學習C++最大的優勢,即讓一個程序員的適應能力曲線日益平滑。

很多人討論過 「C++中的坑」,

「這不是坑,這是語言特性」

C++中等以上水平的程序員是機智的。而且是兼容性最好的,因為他們同時是PHP,Java,JS,C#程序員。


優點在於能夠輕易造坑,然後就需要很多人來填坑,如此往複,創造了大量的就業崗位


  • 其他語言都難兼顧抽象與性能,惟有C++兩者兼得。
  • 支持各種編程範式包羅萬象,語法上又渾然天成,幾無生硬造作之感。
  • 對於每一個牛逼的特性,基本上做到了不用就不造成性能負擔(多重繼承是個小小的例外)
  • class is type,遂有各種牛逼的庫


推薦閱讀:

最近看到陳碩的一本書提了一個問題,「編譯器如何處理inline函數中的static變數?」
C++怎樣讀取文件才有最快的速度?
Mac系統下最好用的C++ IDE是XCode嗎 ?
關於鏈表的問題?
C/C++ 中 exit() 函數的參數到底有什麼意義?

TAG:編程語言 | 編程 | C | CC |