淺析C++語(yǔ)言風(fēng)格問(wèn)題
對(duì)第一次接觸到C++語(yǔ)言的用戶和學(xué)者來(lái)說(shuō),了解C++語(yǔ)言的概念是非常重要的,那么就先說(shuō)一下什么是C++語(yǔ)言,所謂C++語(yǔ)言:是一種使用非常廣泛的計(jì)算機(jī)編程語(yǔ)言。
這些跡象反映出C++語(yǔ)言來(lái)源于C又盡量與C保持兼容的設(shè)計(jì)思想——這種設(shè)計(jì)思想既為C++的迅速普及提供了便利(C++語(yǔ)言的順利推廣顯然得益于C語(yǔ)言已有的龐大用戶群)。
也在C++的語(yǔ)言風(fēng)格中深深地烙上了C語(yǔ)言的印記,以至于在若干年后,當(dāng)C++語(yǔ)言已經(jīng)基本具備了“獨(dú)立人格”的時(shí)候,Stroustrup還不得不時(shí)常提醒人們要盡量拋開C語(yǔ)言的思維方式。
另一方面,Stroustrup從Simula語(yǔ)言借用的類、派生、訪問(wèn)控制等面向?qū)ο蟾拍钤趲ь惖腃中牢牢地扎下了根。據(jù)Stroustrup介紹,他為C語(yǔ)言引入面向?qū)ο髾C(jī)制的本意在于尋找一種“合適的工具”。
以便實(shí)現(xiàn)分布式系統(tǒng)或解決類似的復(fù)雜問(wèn)題。但無(wú)論怎樣,Stroustrup將C的高效和Simula的優(yōu)雅捆綁在一起的做法都在事實(shí)上為C++語(yǔ)言埋下了“雙重性格”的種子——很難說(shuō)這不是C++語(yǔ)言風(fēng)格多樣化的直接誘因。
如果說(shuō)C++語(yǔ)言的生身父母分別是C語(yǔ)言和Simula語(yǔ)言的話,那么,1984年出現(xiàn)的,借助操作符重載實(shí)現(xiàn)的I/O流技術(shù)就是C++這個(gè)幼童甩開父母的庇護(hù),向新的代碼風(fēng)格邁出的第一步了。上面幾行代碼來(lái)自Stroustrup所著《C++程序設(shè)計(jì)語(yǔ)言》中的示例程序。注意那一行由“<<”連接的代碼,I/O流、變量、字符常量在代碼中被巧妙地串聯(lián)在一起。
從技術(shù)角度看,這種全新語(yǔ)法的引入彌補(bǔ)了C語(yǔ)言中printf()函數(shù)族缺乏類型安全機(jī)制和擴(kuò)展能力的弱點(diǎn)。從代碼風(fēng)格上說(shuō),“<<”等通俗易懂的運(yùn)算符大大改變了程序員對(duì)C++語(yǔ)言的第一印象。
我自己第一次接觸C++ I/O流庫(kù)時(shí),就曾清晰地感覺(jué)到,一個(gè)試圖擺脫C語(yǔ)言風(fēng)格束縛的C++精靈正順著“<<”和“>>”組成的溪水“流淌”而來(lái)——這種行云流水般的代碼風(fēng)格在十幾年前就已經(jīng)顯示出了C++語(yǔ)言在塑造新形象、引進(jìn)新觀念方面的決心和勇氣。
20世紀(jì)80年代末到90年代初,X Window、Mac OS、Windows等窗口環(huán)境的先后出現(xiàn)為程序設(shè)計(jì)提出了新的課題,而C++語(yǔ)言兼顧面向?qū)ο蠛蛡鹘y(tǒng)開發(fā)方法的特性無(wú)疑使其成為了窗口環(huán)境下編程語(yǔ)言的最佳選擇。一批基于C++語(yǔ)言的窗口框架不僅在商業(yè)上取得了成功,也在很大程度上改變了C++語(yǔ)言本身的風(fēng)格特點(diǎn)。
最早在窗口開發(fā)中贏得大多數(shù)程序員青睞的C++框架是Borland公司于1992年內(nèi)置在Borland C++ 3.1中的OWL(Object Windows Library)框架庫(kù)。下面這段代碼取自Borland C++ 的示例程序:
為了解決窗口編程中最關(guān)鍵的消息映射問(wèn)題,OWL的設(shè)計(jì)者為C++語(yǔ)言的成員函數(shù)引入了“=[…]”的古怪語(yǔ)法,這是許多用過(guò)Borland C++的程序員至今都無(wú)法忘懷的一種語(yǔ)言風(fēng)格。
我承認(rèn),Borland公司在C++語(yǔ)言的發(fā)展初期為我們提供了最好的編譯器和最出色的集成開發(fā)環(huán)境(IDE),但Borland通過(guò)OWL框架為C++引入的另類語(yǔ)言風(fēng)格的確讓人不敢恭維(客觀地講,這筆賬也不應(yīng)全算在Borland頭上,因?yàn)镺WL的前身是Borland從White Water公司購(gòu)買的框架代碼)。
【編輯推薦】