C++語言是建立在C語言至上的一門簡單便捷的編程語言,C++語言的語法、特性、標准類庫就已經是一門非常高深的課程,所以在開始學習的時候,必須要具備很強的謹慎態度和責任心。
像所有國家的議會或人民代表大會一樣通過沒完沒了的會議、討論和投票制定C++的國際標准。標准直到1998年9月才正式發布。在國際標准化組織的檔案庫裡,C++標准的代號是ISO/IEC 14882:1998。
Stroustrup建議我們把標准C++當作一種全新的語言來學習[3]。這一說法顯然是基於這樣一個事實:標准C++語言已經擁有了一種穩定的、可以推廣的語言風格,即,通過對STL等既有技術的肯定,ANSI/ISO委員會在1998年的標准中正式認可了包括模板、容器類、I/O流庫、異常處理等典型語言特征的現代C++風格。
風格的穩定意味著語言本身的進步和成熟,也意味著程序員們對C++的認識必須上升到一個新的層次——那些至今還在編寫僅由類和C語言庫函數組成的C++代碼的程序員,一定會成為Stroustrup及其同仁們的取笑對象的。
Stroustrup的《C++程序設計語言》第3版對標准C++風格做了最權威的闡釋。在Stroustrup等專家學者的號召下,越來越多的項目開始編寫符合標准C++風格的代碼。這一點在許多開放源代碼的項目中體現得特別明顯。
這多半是由於,使用C++語言的開源項目大多都不會像大企業裡的項目組那樣,在語言風格上會受到公司背景或歷史習慣的羁絆。在具體的編程實踐中,開
例如,在OpenOffice的源碼中,標識符的前綴規范就相當有特點,連指針和引用類型的變量都由不同的前綴字母區分;下面給出的Linux桌面管理器KDE 3.1.4的源代碼片斷則顯示出,開發KDE的程序員在代碼風格上或多或少受到了Java語言風格的影響:
- class delUser: public KDialogBase {
- Q_OBJECT
- public:
- delUser(KUser *AUser, QWidget *parent = 0,
- const char *name = 0);
- bool getDeleteHomeDir()
- { return m_deleteHomeDir->isChecked(); }
- bool getDeleteMailBox()
- { return m_deleteMailBox->isChecked(); }
- private:
- QCheckBox *m_deleteHomeDir;
- QCheckBox *m_deleteMailBox;
- };
語言風格的變遷從一個側面反映了技術思想和產業需求的嬗變規律。從1979年Stroustrup完成第一個Cpre預處理程序算起,C++語言來到這個世界上已經快滿25個年頭了。這是一種在實踐中誕生、成長和發展起來的語言。也許,Stroustrup從一開始就壓根兒也沒想把它設計成像Smalltalk那樣純粹的面向對象語言。開放性、高效率、兼容性和擴展性的需求將C++語言塑造成了一種典型的多模式Multiparadigm)語言。
無論是C++早期對Simula語言的繼承,還是後來對Smalltalk、Ada、Clu等語言的借鑒,無論是ANSI/ISO標准風格的迅速普及,還是Visual C++ .NET在技術創新上的不懈努力,所有這些歷史變遷都說明,C++在風格上的多樣性主要源自C++語言本身“海納百川”的胸襟和氣概。
5年以後,當C++步入而立之年的時候,它會給我們帶來新的驚喜嗎?我們還會看到更加新奇的C++語言風格嗎?也許,沒有誰能給出准確的答案。但作為程序員,我們至少應該知道:無論面對什麼樣的軟件需求。
無論使用什麼樣的思維方式,C++語言都賦予了我們選擇語言風格的最大自由;當我們真正理解了C++語言的精神實質之後,這種自由也必將成為所有優秀軟件和優雅代碼的堅實基礎。