跳至內容

C++

出自轻之舟百科

C++(英文全稱:C Plus Plus)是一種通用的、多範式的編程語言,由丹麥計算機科學家比雅尼·斯特勞斯特魯普(Bjarne Stroustrup)於1979年在貝爾實驗室開始研發,最初被稱為"C with Classes"(帶類的C)。C++在C語言的基礎上擴展了面向對象編程、泛型編程和函數式編程等特性,同時保留了C語言對底層硬件的高效訪問能力,被設計為具有"零開銷抽象"理念的系統級編程語言。[1] 1983年,該語言正式更名為C++,名稱源自C語言中的自增運算符(++),象徵其為C語言的進化版本。[2] 1985年,斯特勞斯特魯普出版《The C++ Programming Language》第一版,標誌着C++正式進入商業應用階段。[2] 1998年,國際標準化組織(ISO)與美國國家標準化協會(ANSI)聯合批准並發布了首個C++國際標準ISO/IEC 14882:1998(通稱C++98),使C++成為具有國際標準的編程語言。[3] 此後,ISO/IEC JTC1/SC22/WG21(C++標準委員會)每三年發布一次新標準,陸續推出C++03、C++11、C++14、C++17、C++20、C++23等版本,持續推動語言現代化演進。[4]

C++
中文名 C++
外文名 C Plus Plus
設計者 比雅尼·斯特勞斯特魯普
實現者 比雅尼·斯特勞斯特魯普
發行時間 1985年
標準化組織 ISO/IEC JTC1/SC22/WG21
最新標準 ISO/IEC 14882:2024(C++23)[5]
編程範式 多範式:面向對象、過程式、泛型、函數式
文件擴展名 .cpp、.cxx、.cc、.C、.hpp、.h

發展歷史

起源與早期發展

1979年,比雅尼·斯特勞斯特魯普在貝爾實驗室開始開發一種在C語言基礎上增加類(Class)機制的語言,最初命名為"C with Classes"。其設計動機源於斯特勞斯特魯普在博士研究期間使用Simula語言的經驗,他希望將面向對象編程的抽象能力與C語言的高效性和底層控制能力相結合。[1] 1983年,里克·馬西蒂(Rick Mascitti)提議將語言更名為C++,該名稱隨後被正式採用。[2]

1985年,C++首個商業版本隨Cfront 1.0編譯器一同發布,同年斯特勞斯特魯普所著《The C++ Programming Language》首次出版,成為該語言事實上的權威參考。這一版本引入了虛函數、函數與運算符重載、引用、new/delete運算符及const關鍵字等重要特性。[1] 1989年發布的Cfront 2.0進一步增加了多重繼承、抽象類、靜態成員函數和受保護成員等機制,顯著增強了面向對象編程能力。[1]

標準化歷程

隨着C++在商業和學術領域的迅速普及,不同編譯器廠商的實現差異導致代碼可移植性問題日益突出。1989年,ANSI成立C++標準化委員會,隨後ISO於1991年介入,成立聯合技術委員會ISO/IEC JTC1/SC22/WG21(通稱WG21),負責C++的國際標準化工作。[4]

1998年9月1日,ISO正式發布首個C++國際標準ISO/IEC 14882:1998(C++98),該標準確立了核心語言特性、標準模板庫(STL)及異常處理、命名空間等關鍵機制,為C++的跨平台一致性奠定了基礎。[3] 2003年,ISO發布修訂標準ISO/IEC 14882:2003(C++03),主要修正C++98中的缺陷並澄清歧義,未引入重大新特性。[2]

現代C++演進

2011年8月,ISO發布C++11標準(原稱C++0x),這是C++發展史上的重大里程碑,引入了自動類型推導(auto)、Lambda表達式、智能指針、右值引用與移動語義、範圍for循環、並發支持等大量現代特性,標誌着"現代C++"(Modern C++)時代的開端。[6]

此後,C++進入每三年一次的固定發布周期。2014年的C++14作為C++11的增量更新,完善了泛型Lambda、變量模板等特性;2017年的C++17引入了結構化綁定、if constexpr、文件系統庫及並行算法;2020年的C++20則帶來概念(Concepts)、協程(Coroutines)、模塊(Modules)和範圍(Ranges)等革命性特性,顯著提升了語言的表達能力與編譯效率。[2] 2024年,ISO發布ISO/IEC 14882:2024(C++23),進一步擴展了標準庫並引入了新的語言特性。[5]

語言特性

核心語法與類型系統

C++繼承了C語言的過程式編程模型與類型系統,並在此基礎上進行了顯著擴展。語言支持內置類型(如int、double、char)與用戶自定義類型(通過class、struct、enum、union定義),並提供強大的運算符重載機制,允許用戶自定義類型模擬內置類型的行為。[1] C++20起引入的概念(Concepts)機制,可對模板參數進行編譯期約束,顯著提升模板錯誤的可讀性。[2]

面向對象編程

C++支持完整的面向對象編程範式,包括封裝(通過訪問控制符public、protected、private實現)、繼承(單繼承與多重繼承)和多態(通過虛函數與抽象類實現)。構造函數與析構函數機制支持資源獲取即初始化(RAII)慣用法,成為C++資源管理的核心哲學。[1]

泛型編程與模板

模板(Template)是C++泛型編程的基石,允許算法與數據結構獨立於具體類型。1998年納入標準的標準模板庫(STL)提供了容器(如vector、map、set)、算法(如sort、find)和迭代器等泛型組件。[3] C++11引入的變參模板(Variadic Templates)與C++14的泛型Lambda進一步增強了泛型編程的靈活性。[2]

標準庫

C++標準庫隨語言標準持續演進,涵蓋輸入輸出流(iostream)、字符串處理(string)、正則表達式、多線程支持、智能指針(unique_ptr、shared_ptr)及文件系統操作等現代編程所需的基礎設施。C++20引入的範圍庫(Ranges)與協程支持,為標準庫帶來了聲明式編程與異步編程的新範式。[2]

應用領域

C++被設計為一種"偏向系統編程的通用語言",廣泛應用於操作系統、嵌入式系統、遊戲引擎、高性能服務器、金融交易系統、瀏覽器內核及科學計算等對性能與資源控制要求嚴苛的領域。[7] 其"零開銷抽象"理念——即不使用的特性不產生運行時開銷——使其在資源受限環境中保持競爭力。主流C++編譯器包括GCC、Clang、MSVC等,支持從微控制器到超級計算機的廣泛硬件平台。[7]

參考文獻