答C++復雜多余者之惑


C和C++有太多的歷史包袱而其它語言並沒有這些,從另一個角度下來講C和C++其實就是現代語言的活字典,也是現代軟件設計的基礎,當然有更古老的語言,但像C和C++影響力這么大的卻無其它語言可以出其左右。

C++和其它語言最大的不同在於它不屬於任何人,任何公司,而Java,C#,Python,Ruby等都是由某個公司或個人控制的,在相對封閉的體系之下設計的語言很容易可以做到易用性,但靈活性和設計思想的廣泛度上與C++這樣的語言不可同日而語。且不說其它語言從C/C++中借鑒的大量的特性,單就語言本身能夠體現的設計思想廣泛性上來講只能說其它語言只作到了”溺水三千 只取一瓢”,像C++可以支持設計風格就有四種:面向過程、基於對象、面向對象、泛型。今日的C++並不是一開始就這樣,最初的C++ 中連stl都沒有,stl最初是HP內部開發使用的,后來才加入到標准中去,template技術也是后來加入的,反過來stl又引template的出現作了相應修改。由於C++開放的特性,在其被快速、廣泛應用的同時,也出現標准落后於編譯器實現的情況,因為業界的需求總是先於標准出現的,而商業化的產品必須滿足這種需求。比較具體的例子如早期的VC++ ,在其MFC庫中加入了很多現在看來冗余的設計比如說List這樣的容器,那是不得已而為之,MFC出現的時候C++本身還不夠完善,如此VC++本身就有了另一種歷史負擔,由於Windows平台在國內事實上的統治地位,造就了大批C++開發從VC++開始的進入這個領域的局面,而由於VC++、MFC本身的實現就不夠標准,所以在入門的時候就把人引入了歧途,讓學C++的根本沒搞清楚到底什么是C什么是C++。大多數人從寫界面開始,所以MFC的影響很不好,另一個角度來講Windows本身所提倡的API風格,編碼風格(匈牙利命名法)完全自成一體,與Unix-like這種提倡,簡潔、明了的設計風格背后的設計哲學完全不同,但現代軟件的歷史其實是C/C++和Unix歷史,所以在沒有搞明白這些之前貿然進入Windows開發領域反而給更多的人造成的更多的困惑,我不是說Windows不好,而是想說不懂Linux、Unix、C/C++,那更不可能真正的搞懂Windows。因為操作系統理論上很多東西都是由unix發展過來的。簡單如strcpy這樣的C函數和StringCopy這樣的函數名稱在編碼的時候有多少在會去思考它背后的東西呢?

 

C++樣的背景正好和GNU以及互聯網的發展過程相切合,從軟件工程的角度來講正如《人月神話》所說,C++實際上和Linux一樣,是在一種“大集市”的模式下產生的,從而產生了類似Linux的問題,靈活、強大,但進入的門檻比較高。各種思想在C++ 中全面開花造成C++本身強大的同時復雜度也飆升。但就像Unix-like OS使用一樣,他就是面向技術人員的,而且面向的是喜歡技術的人員,如果你是個比較懶的技術人員那么C/C++絕不適合你,因為它在不停的發展,也有浩瀚如海的思想和技巧在里面,不時常的琢磨是絕對用不好的。

 

C++中異常的處理之所以不如Java這樣的語言完善,是因為操作系統的限制,真正的異常處理機制完全是由操作系統提供的,在各種平台的差異下編譯器沒有辦法作到面面俱到,而Java之所以可以做的更好,之是因為有JVM的存在,C++編譯器不能代替操作系統的工作,但JVM卻可以勝任這個角色。

 

至於大而全的庫,C++發展至念已經有很多不錯的庫了,比如說boost,poco,正因為很多人沒搞清楚c/c++是什么,還在思想的混亂中糾結就更不可能對庫有更准確的看法了。如果你真的在使用C++那么學習使用好的庫如boost,那么價值遠大於去學習另一門語言。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM