為什麼有些人罵 C++,如 Linux 之父對 C++ 進行了炮轟,說它是糟糕程序員的垃圾語言?
為什麼看到這麼多人不推薦C++?
「世界上只有兩種語言,一種是沒人用的,一種是被人罵的。」
因為C++不是平庸的語言,所謂不平庸就是它的優點和缺點都極其鮮明,好的地方非常好,爛的地方非常爛。這當然就給了想罵的人很多素材槽點。
而那些平庸的語言,優點缺點都不太明顯,自然流行不起來,當然也就沒人罵了。
我摔跤的時候也罵地不平。
1.有用,無其他語言可以替代。2.用好C++需要厚積薄發,不能速成,容易使人急躁。
「它是糟糕程序員的垃圾語言!」,畫外之音:「它是高端程序員的牛逼語言!」。
- 曾經極度流行,主流開發的不二選擇。
- 不適合普通水平的程序員,但是普通水平程序員是主流。
每個流行的編程語言都有人罵,但每個流行的編程語言都活的好壞的,甚至是發展得更好了。
不單單C++有人罵, java,c, c#,php,perl,phython,javascript,ruby都一樣有人罵之前一直對此感到不以為然,覺得裸奔的感覺挺好的。現在在做稍微複雜一點的系統,就感覺到C++的問題了。
我認為C++的一個重要理念——盡量不引入任何運行時代價,編譯的時候定死,運行時裸奔——是非常難以達到的。實際上,稍微複雜一些的項目就做不到這一點。看開源界的兩大桌面架構:Qt與Gtk,分別都作出了大幅擴展,實現了反射、事件回調功能。Qt選擇的是自己弄個源代碼生成器,輸入擴展的C++代碼(有SIGNAL、SLOT等關鍵字),輸出編譯實際用的C++代碼。而Gtk的GObject選擇了用一大堆屎一樣的宏來擴展C語言;最終他們自己也不能忍了,也弄了個源代碼生成器,而且比部分使用了C++的Qt走得更遠——輸出C代碼的vala語言。
我感覺,C++太龐大了。我們需要把它劈成兩半:一半是有模板、名字空間的C,用來玩裸奔;另一半是有對象、繼承、反射、回調事件、引用計數的高級語言,用來構建複雜系統。引用老外對c++的評價:it"s never designed, it grows.
C++沒有一個核心機制,沒有一個設計原則,沒有類似pythonic的概念。
羨慕妒忌恨嘛
看看我的簽名,我從來都沒有罵過。
因為學不會,你看我就不怎麼罵。話說回來C++03為了兼容C98是搞出了很多缺點,但是到了C++14已經基本彌補完了。從兼容C98的大前提來講,C++基本上全都做對了。
從C++17開始就發展出新的力量了,譬如說大家都很喜歡的可以迅速提高生產力的await,只有C#、F#和C++有,還有一些小眾語言也有,但是大家喜愛的先進的腳本語言ruby、python、javascript都沒有,情何以堪。
正經點回答的話,c++確實有不少槽點啦,奇葩的.h,沒有官方包,更奇葩的template,等等等等。很多是歷史問題,或者是遷就c,或者遷就98,或者遷就現在這個編譯的模型……不過他也在改進嘛,近年來步子也越來越大了,越來越像一門現代語言了。比那個什麼j什麼的好多啦。有人罵證明還火嘛,你看現在還有人罵vb么
罵 C++ 的分兩種,一種是靠 C++ 做了許多驚天動地的大事,路上踩過坑崴過腳笑著抱怨兩句;另一種是學不會只能罵的 loser 。什麼被罵的語言不是呢。
說英語沒用的都是學不好的,
說錢多沒用的都是沒有錢的。
打是親,罵是愛
用的人多才會有人罵,反倒是不罵了,就說明這門語言沒有希望了。這就是愛之深,恨之切!
那是因為他們沒用過NS2……
打是親,罵是愛
自是非他,自贊毀他。是普遍存在的現象。不需要理會的。自己心裡知道C++的優缺點、長短處、應該怎麼用就可以了。
推薦閱讀:
※C++中if(x==8)和if(8==x)有什麼區別?
※有什麼像a=a+b;b=a-b;a=a-b;這樣的演算法或者知識?
※程序中的變數名總是起的很長怎麼辦?英文單詞的縮寫有規律么?
※如果重新設計C#你最希望增加什麼特性,去掉什麼特性,改變什麼語法?
※Unity3d&Cocos2dx進階書籍推薦?