C++很複雜, 這門語言有太多的誘惑, 程式師需要極度的自律。 而C++設計成這樣也是因為Bjarne說過他不希望把自己任何的喜惡都加在語言上, 他希望程式師自己去判定, 完全信任程式師。 然而, 資訊時代發展到現在了, 程式師也已經不像80, 90時代一樣, 似乎是少數人才可以做得事情, 現在可以寫冒泡排序都可以找到一個程式設計開發工作, 不需要理解電腦組織, 不需要理解作業系統等等。 而由於電腦基礎的缺失, 這樣的程式師卻往往是需要語言來説明規範的, 需要語言幫他選擇, 而非他來選擇語言的特性。
也正是這樣, C++具有著很大的複雜性, 融合OOP, GP等各種程式設計范式於一身, 而這也是對新手不利的地方。 雖然現在的C++已經進化了, C++11/14對於新手來說已經算友善了, 少了很多歷史殘留的坑, 但是C++發展的路途增加新特性也是對新手的更大學習負擔, 如增加的右值引用, std::move, std::forward到底又是什麼東西?
學程式設計最重要的是實踐, 就是寫代碼、看別人寫的代碼、再寫代碼, 你看再多的書, 不寫代碼, 你還是不會程式設計。 但是寫代碼也要講究方法循序漸進, 不能剛學了幾天語法, 就想寫個作業系統什麼的, 樹立這種不切實際的目標只會讓你的自信受到嚴重打擊迷失自我。 同時小編推薦一個學C/C++的學習群627819188無論你是大牛還是小白, 是想轉行還是想入行都可以來瞭解一起進步一起學習!群內有很多乾貨和技術分享!
C++的複雜性也體現在類型系統上, 不知道多少人都被C++的隱式類型轉換給弄的頭昏腦脹, 如為什麼會有bool轉換這樣的東西。 同時, 加入了泛型程式設計和右值引用後, 那麼類型推導也變得複雜。 如:
為什麼明明是T&&, 卻會讓我的類型推導出不同的類型, 這個時候對於初次接觸的人都是不解。 以前有句話叫做沒有讀過Effective C++的C++程式師不應該讓他開發, 我覺得這句話現在也可以引申為沒有讀過Effective Modern C++的C++程式師不應該讓他開發, 因為這本書寫的真的很好很透徹, 而這本書就詳細解釋了這個例子的原因。
下面我想說說上面幾個用戶提到的問題, 如模組化系統, 編譯慢,
的確, C++在不斷的進化, 在不斷的改善, 也同時增加了新手的學習。 如上面有人談到C++沒有模組系統, 編譯慢的問題, 而C++17有一篇提案講述的正是這個, 叫做Module System, 簡單的語法:
而這篇提案也提到了有用戶答的私有成員問題, 如在Module M聲明的foo是可見的, 而bar則是完全不可見,
而其實大家痛苦的很多地方, C++標準委員會的人也不是不知道, 如ABI的問題, 也有提案說想要做一個標準, 這篇提案是微軟的Herb提出的: https://isocpp.org/files/papers/n4028.pdf 而前一篇的Module System深得Bjarne的喜歡, 而通過的幾率其實也是蠻大的了, 而Herb這篇我不知道, 說不定也已經被斃了, 只是我不知道。
對於異常, 大家都在討論用不用。 可是, 對於使用者來說, 是否真的需要異常呢?我曾在一個回答中說C++的異常是很雞肋的東西, 或者說的更直白點, 要用好C++的異常不容易, 不是無腦的try throw就好, C++也不會像Java一樣會強制要求你, C++的設計就是程式師自己做主。
而上面同樣說到沒有Metadata, 沒有反射。 而C++17也在考慮加入反射。 是的, 正如C++標準委員會之前定的計畫一樣, C++11是大改動,C++14小修改,C++17又是大改動。
總體來說,C++真的很複雜,或許現階段還有ABI,還有編譯連結模型,還有類型系統,模組系統等的問題,其實C++也許都可以解決,但是解決完後又變複雜了,因為要保持與之前的相容,還要保證高性能這一根本立足點,這真是對智力的一大考驗啊,所以我一直在說C++標準委員會的人都蠻碉的,比如C++11提出的Memory Model,真是把能抽象剝離的都抽象剝離出來了,很精細。
我是很喜愛C++的,更是Bjarne的腦殘粉,也靠著C++在吃飯。我很欣喜的看著C++不斷的變好,但是也必須承認C++還有很多不足,如很多小夥伴和我上面提到的很多問題都的確是客觀存在的。
C++11是大改動,C++14小修改,C++17又是大改動。總體來說,C++真的很複雜,或許現階段還有ABI,還有編譯連結模型,還有類型系統,模組系統等的問題,其實C++也許都可以解決,但是解決完後又變複雜了,因為要保持與之前的相容,還要保證高性能這一根本立足點,這真是對智力的一大考驗啊,所以我一直在說C++標準委員會的人都蠻碉的,比如C++11提出的Memory Model,真是把能抽象剝離的都抽象剝離出來了,很精細。
我是很喜愛C++的,更是Bjarne的腦殘粉,也靠著C++在吃飯。我很欣喜的看著C++不斷的變好,但是也必須承認C++還有很多不足,如很多小夥伴和我上面提到的很多問題都的確是客觀存在的。