下面一起對C++語言進行標准化工作,微軟並於1998年正式發布了C++語言的國際標准ISO/IEC:98-14882。C++語言已經成為最流行的程序設計語言之一,希望本文能教會你更多東西。下面就先從C++程序設計說明開始吧。
Bjarne StroustrupC++的設計者)對C++的設計和演化的描述C++的設計和演化The Design and Evolution of C++)C++程序設計語言是由來自AT&T Bell Laboratories的Bjarne Stroustrup即本文作者)設計和實現的,它兼具Simula語言在組織與設計方面的特性以及適用於系統程序設計的C語言設施。
C++最初的版本被稱作“帶類的CC with classes)”[Stroustrup,1980],在1980年被第一次投入使用;當時它只支持系統程序設計§3)和數據抽象技術§4.1)。支持面向對象程序設計的語言設施在1983年被加入C++;之後,面向對象設計方法和面向對象程序設計技術就逐漸進入了C++領域。
在1985年,C++程序設計第一次投入商業市場[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年間,支持范型程序設計的語言設施也被加進了C++[Ellis,1990][Stroustrup,1991]。 隨著若干獨立開發的C++實現產品的出現和廣泛應用,正式的C++標准化工作在1990年啟動。標准化工作由ANSIAmerican National Standard Institute)以及後來加入的ISOInternational Standards Organization)負責。1998年正式發布了C++語言的國際標准[C++,1998]。
在標准化工作進展期間,標准委員會充當了一個重要的角色,其發布的C++標准之草案在正式標准發布之前,一直被作為過渡標准而存在。而作為標准委員會中的積極分子,我是C++進一步發展工作中的主要參與者。與以前的C++語言版本相比,標准C++更接近我理想中的那個C++語言了。關於C++的設計和演化,在[Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有詳細的敘述。至於標准化工作末期產生的C++語言定義,在[Stroustrup,1997]有詳細敘述。
當然,這些規則要具體結合更多關於基本目標的上下文環境來考慮。應該注意到的是,在“與C有較高的兼容性”、“不損失效率”以及“具有便捷的可用性來解決實際問題”這三個方面的要求,與在“完整的型別安全性”、“完全的通用性”以及“完善的抽象之美”這三個方面的要求形成對立。
C++程序設計從Simula中借鑒了用戶自定義型別class,§4.1)和類層次機制。然而,在Simula及許多類似的語言中,其對用戶自定義型別的支持與其對內建型別的支持存在著根本上的不同。例如,Simula中不允許在棧中為用戶自定義型別的對象分配空間,並且只允許通過指針這在Simula中稱為引用——reference)來對這些對象進行訪問。而相反的,內建型別的對象只在棧中被分配空間,不能在動態存儲區中分配,而且不能使用指針指向它。
這種在對待內建型別與對待用戶自定義型別上的差異,暗示著對效率問題的嚴格考慮。比如,當作為一個在動態存儲區中被分配的對象之引用時,如果該對象屬於自定義型別比如complex,§4.1),那麼就會為運行期及空間帶來負荷;
而這些負荷在有些應用中被認為是不可接受的。這些正是C++意欲涉足解決的問題。同時,在用法上的不同也決定了:不可能在范型程序設計中統一對待那些語義上近似的型別。
在C++程序設計中只要在不嚴重影響其對強型別檢查strong type checking)的支持的地方,都盡量做到與C的“source-link”方式相兼容。除了某些微小的細節差別之外,C++將C[Kernighan,1978][Kernighan,1988]作為一個子集包含了進來。C++與C的兼容性使得C++程序員立刻就能有一個完整的語言和工具集可用。還有兩點也很重要,一是有大量關於C的高質量的教學素材已經存在,二是C++程序員可以利用C++與C的兼容性而直接並有效的使用大量現成的程序庫。
在決定將C作為C++的基礎的時候,C還沒有像後來那樣出類拔萃、炙手可熱,所以在考慮這個問題的時候,與C語言所提供的可適應性和高效性相比,C語言的流行程度只是個次要的考慮因素。
然而,與C的兼容性也使得C++程序設計在某些語法和語義上保留了C的一些瑕疵之處。比如,C語言的聲明語法就實在遠不及優美;而其內建型別的隱式轉換規則也是混亂無章法的。還有另一個大問題,就是許多從C轉向C++的程序員並沒有認識到,代碼質量上的顯著提高只能通過在程序設計風格上的顯著改變來達到。