C++
通用高階程式語言 / 維基百科,自由的 encyclopedia
C++是一種被廣泛使用的電腦程式設計語言。它是一種通用程式設計語言,支援多重程式設計範式,例如過程化程式設計、物件導向程式設計、泛型程式設計和函數式程式設計等。
編程範型 | 多範式:物件導向程式設計,過程化程式設計,泛型程式設計 |
---|---|
設計者 | 比雅尼·斯特勞斯特魯普 |
釋出時間 | 1983年,41年前(1983) |
目前版本 |
|
型態系統 | 靜態型別,強型別,不安全 |
實作語言 | C++、C 等 |
副檔名 | .C .cc .cpp .cxx .c++(原始檔) .h .hh .hpp .hxx .h++(標頭檔) |
網站 | isocpp |
主要實作產品 | |
Embarcadero C++Builder, GCC, Intel C++ Compiler, Microsoft Visual C++, LLVM Clang | |
衍生副語言 | |
ISO/IEC 14882:1998, ISO/IEC 14882:2003, ISO/IEC 14882:2011, ISO/IEC 14882:2014, ISO/IEC 14882:2017 | |
啟發語言 | |
Ada 83, ALGOL 68, C, CLU, ML, Simula | |
影響語言 | |
Ada 95, Aikido, C99, C#, Clojure, D, Dao, Falcon, Java, Lua, Perl, PHP |
比雅尼·斯特勞斯特魯普博士在貝爾實驗室工作期間在20世紀80年代發明並實現了C++。起初,這種語言被稱作「C with Classes」(「包含『類』的C語言」),作為C語言的增強版出現。隨後,C++不斷增加新特性。虛擬函式、運算子多載、多繼承、標準模板庫、例外處理、執行時型別資訊、命名空間等概念逐漸納入標準草案。1998年,國際標準組織頒佈了C++程式設計語言的第一個國際標準ISO/IEC 14882:1998,目前最新標準為ISO/IEC 14882:2020。ISO/IEC 14882通稱ISO C++。ISO C++包含了主要包含了核心語言和標準庫的規則。儘管從核心語言到標準庫都有顯著不同,ISO C++直接正式(normative)參照了ISO/IEC 9899(通稱ISO C),且ISO C++標準庫的一部分和ISO C的標準庫的API完全相同,另有很小一部分和C標準庫略有差異(例如,strcat
等函數提供對const
型別的多載)。這使得C和C++的標準庫實現常常被一併提供,在核心語言規則很大一部分相容的情況下,進一步確保用戶通常較容易把符合ISO C的源程式不經修改或經極少修改直接作為C++源程式使用,也是C++語言繼C語言之後流行的一個重要原因。
作為廣泛被使用的工業語言,C++存在多個流行的成熟實現:GCC、基於LLVM的Clang以及Visual C++等。這些實現同時也是成熟的C語言實現,但對C語言的支援程度不一(例如,VC++對ANSI C89之後的標準支援較不完善)。大多數流行的實現包含了編譯器和C++部分標準庫的實現。編譯器直接提供核心語言規則的實現,而庫提供ISO C++標準庫的實現。這些實現中,庫可能同時包含和ISO C標準庫的共用實現(如VC++的msvcrt);而另一些實現的ISO C標準庫則是單獨於編譯器專案之外提供的,如glibc和musl。C++標準庫的實現也可能支援多種編譯器,如GCC的libstdc++庫支援GCC的g++和LLVM Clang的clang++。這些不同的豐富組合使市面上的C++環境具有許多細節上的實現差異,因而遵循ISO C++這樣的權威標準對維持可移植性顯得更加重要。現今討論的C++語言,除非另行指明,通常均指ISO C++規則定義的C++語言(雖然因為實現的差異,可能不一定是最新的正式版本)。
值得注意,和流行的誤解不同,ISO C和ISO C++都從未明確要求源程式被編譯(compile),而僅要求翻譯(translate),因此C和C++並不是所謂的編譯型語言。技術上,實現C和C++程式的單位是翻譯單元(translation unit)。作為對比,Java語言規範中就明確要求Java程式被編譯實現,明確存在編譯單元(compilation unit)。實際上C和C++也存在REPL形式的直譯器實現,如CINT和Cling。但因為傳統上C和C++多以編譯器實現,習慣上仍有一些混用,甚至至今仍出現在ISO C++某節標準庫條款的標題 (頁面存檔備份,存於互聯網檔案館)上。
傳統上,C++語言被視為和C語言實現效能相近的語言,強調執行時的高效。根據《C++編程思想》(Thinking in C++)一書,C++與C的代碼執行效率往往相差在±5%之間[2]。