標籤:

使用C++的痛苦來自哪裡?

不是說,C++的爸叫人學會用C++裡面適合自己的子集用就行了,自己喜歡不用模板,多重繼承就不用咯,為毛C++還這麼多人用得這麼痛苦?


書讀的太少而想得太多

能力太差而慾望太多

了解太膚淺而恨的太多


C++的歷史包袱很重,寫C++對心智要求比較高,使用它的特性時總是會小心翼翼。


來自於要求你用C++寫的程序通常對質量的要求都高於其他語言。如果你用寫python的心態去寫C++14,那自然是沒有問題的,而且開發效率也是相近的。當然了,出來的運行效率也最多就差一個數量級,完全發揮不出C++的力量,根本達不到產品狗的要求。

我自己寫給自己用的小破工具的時候,有時候用C#,有時候用C++,寫出來的代碼也是差不多一樣長,開發時間也差不多一樣久。但是用這種心態寫出來的C++,我發現都不如C#跑得快……

C#才是真正解放高級程序員的生產力的。


主要的痛苦是糙快猛的輪子少,比方寫網路的話,缺個類似 goroutine/channel 或者 akka 這樣的東東,你自然可以用 libevent 自己調校出來一個90分的,但是投入就比較大了,即便你是比較熟練的 C++ 程序員,也不敢保證比生手 go 程序員寫得快。

當然其實 C++ 也有 coroutine,也有基於 coroutine 的actor 框架,但就是不成氣候,所以你想簡單做到70分或者80分就很費力。


你不能把人想像成理想狀態的人,人都是有惰性的,以前看過一個文章,就說某某軟體有個A功能和B功能,它們都很好用,使用的場景也應該差不多多,但是經過調查,B用的人非常少,最後發現原因僅僅是因為B功能點擊按鈕之後要等待一小段時間而已.

編程也是如此,例如要跨語言完成某個東西,我相信大部分人都懶的搞了,如果語言本身支持某種功能呢,N多人都會想盡辦法去用的.比如我現在已經離不開C++11的某些功能了,由於某種原因不得不用幾天VS2008,簡直太難用了全不支持還編毛個程,可是一想,不對啊,C++11之前不是一樣用的爽飛?

有時候就是一個語法糖而已,卻成了推動某個理念的動力.

就像你說的"我就是不用模板",相信我,總有一天你會有一個需求不用模板就是不爽."不用多繼承",總有一天你會有個需求要用它,同理的,"不用RAII","不用異常","只用默認構造".......最終你會發現你曾經堅持的底線被一次一次擊穿.最終背上一個又一個沉重的心智包袱.每當你遇到一個需求的時候,你都會在心裡鬥爭: 我有100種實現它的方法,我到底該用哪個...... 有一些大神超越了它,懂得該用這100種方法里的那一種實現新的需求,但大部分人被這100種可能的實現方法搞的暈頭轉向,另外還有很多人只知道10種方法,每天都在痛苦學習剩下的90種方法.----所以你看,這是一門只有大神快樂,其他人都痛苦的語言.所以要用C++,要麼成神,要麼痛苦.....沒有中間的步驟.


痛苦來自於C++裡面有很多容易體現一個人聰明的地方,很多人忙著去體現聰明去了。

手好癢啊,要不要黑一下 C++呢?

傳送門:純C語言的工作有前(錢)景嗎? - 韋易笑的回答


自己一個人擼C++還是能high得起來的,痛苦的地方一般都是在跟別人一起擼或者不得不在別人的基礎上擼的時候。


有很多寫C會出泄露崩潰,連core dump都不會看的人,

熱衷於用C++來實踐他們學的『設計模式』。

使用C++的痛苦就來自於,有時候你需要為他們擦屁股。


智商太低。


雖然不懂C++但路過來吐槽一下這種不想用可以不用的心態。

你自己全棧寫的程序或者你自己控制的團隊才能不想用就不用呀。

別人寫的東西你不想用也要能看懂呀。如果要修改,你是打算保持程序的原本風格呢還是堅持自己的喜好? 如果保持原本風格,你最終就什麼都要能用。如果保持自身喜好,你就把一段原本只有一部分人看著不爽的程序搞得所有人都看著不爽。

所以最終,要麼你所有特性都用,要麼你只能依附於剛好與你喜好相同的團隊,要麼產品代碼一團亂麻。三者必居其一。


C++的痛苦絕大部分來自於向下兼容的原罪,如果早十年搞出C++11/14標準和庫,所有項目都用新標準寫,根本不痛苦。


最主要的原因是歷史包袱,現行的標準比以前好用多了,但如果你接手的是舊項目,還是得用原來那一套。

理論上說你可以只用一個子集來開發,但是問題是一般項目並不是你一個人開發。可能你很喜歡某個特性,但是對不起,團隊的代碼規範不允許…當然按著Python的哲學,有太多選擇本身就是一種錯。

標準委員會過於學院派。C++標準庫支持的東西比那些虛擬機語言少得多,有些標準庫難用得很,比如iostream,locale什麼的…當然如果在BAT,很多項目根本不准你用STL.

目前社區對Rust寄予厚望,雖然沒個好爹,但還是希望將來能在某些領域內替換掉C++,解放程序員的大腦。


C++大法好,學個語言7/8年,寫個軟體3/4年,同事挖坑我來填,內存泄露自己管,需求變更全完蛋…為啥學C++?碼農的三大浪費,情懷…


不針對最新C++標準:

1、類成員無法在聲明時提供初值,必須放在構造函數中

2、構造函數的初始化列表中出現異常,麻煩

3、不必要的拷貝想去除,費勁

其他人提到的:

1、多重繼承。我認為還好,只要不濫用。例如一個類除了自己本來的父類之外,再從Uncobyable、Singlton繼承以達到某種效果不是很好嗎?

2、手動內存管理。我認為挺好,一定程度上這是個優點。


因為每個人喜歡的feature不一樣。拿到一個全是你討厭的feature寫成東西讓你接著維護,給誰不崩潰啊

所以c++用的爽的要麼是大牛精通所有feature,要麼是自己寫自己爽,要麼就是周圍人都用同樣的feature


無處不在的指針(Pointer)和防不勝防的內存溢出(Out of memory)


痛苦來自於c++語言本身的複雜性及其孱弱的標準庫。

對於低階用戶來講,c++語言的各種靈活複雜的特性的準確用法很難掌握,找到實現各種必要功能的合適的工具和庫也比較難,其學習曲線陡峭漫長。

對高階用戶來講,c++標準庫問題使得在構建大型系統,特別是移植其它程序的時候,大大增加了工作量。

另外,相對於c#,c++編寫代碼效率低。例如:頭文件、實現文件分離,相當於要多寫一份聲明;編譯鏈接速度相對慢得多;#include頭文件與using名稱空間相比太落後了;使用其他庫或者其他源代碼,c#基本可以直接引入,c++往往要修改很多地方...

用c++時,大腦佔用率99%以上;用c#時,大腦佔用率60%以下。

總結一句話:民主是一種現代生活,

c#是一種現代語言。


C++的痛苦來源於,VS太吃硬體了.我沒錢買更好的電腦去支撐他那編譯的速度。

如果你說的是IOS C++,抱歉,MACBOOK都是夢裡想想就行了


學習演算法時用C++,老師要求用msgpack來打包數據,結果精力大部分都不在演算法的實現上,而是在如何將文件流pack和unpack...


只是被其他語法糖多的語言慣壞了而已。c++很多方法都要自己實現


推薦閱讀:

最近在Oulu進行的關於c++17標準的會議有什麼進展?
c++開發轉向go開發是否是一個好的發展方向?
這個求指數函數exp()的快速近似方法的原理是什麼?
為什麼C++中的RAII類一般都是不可複製的?
如何評價博客園上的博文《 開發人員要亡新浪微博,你攔都攔不住!》?

TAG:C |