C++

通用高階程式語言 / 维基百科,自由的 百科全书

C++是一种被广泛使用的计算机程序设计语言。它是一种通用程式设计语,支援多重编程范式,例如程化程序设计面向对象程序设计泛型程式设计函数式程序设计等。

Quick facts: , 设计者, , 当前版本, 型态系统...
C++
ISO_C%2B%2B_Logo.svg
多范型面向对象编程程化泛型编程
设计比雅尼·斯特劳斯特鲁普
1983年40年前1983
当前版本
  • C++20 (2020年12月;定版本)[1]
编辑维基数据链接
静态类型强类型不安全
C++、C 等
文件扩展名.c .cc .cpp .cxx .c++(源文件)
.h .hh .hpp .hxx .h++(头文件)
isocpp.org
主要
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
Close

比雅尼·斯特斯特博士在贝尔实验室工作期间在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、基于LLVMClang以及Visual C++等。这些实现同时也是成熟的C语言实现,但对C语言的支持程度不一(例如,VC++对ANSI C89之后的标准支持较不完善)。大多数流行的实现包含了编译器和C++部分标准库的实现。编译器直接提供核心语言规则的实现,而库提供ISO C++标准库的实现。这些实现中,库可能同时包含和ISO C标准库的共用实现(如VC++的msvcrt);而另一些实现的ISO C标准库则是单独于编译器项目之外提供的,如glibcmusl。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形式的解释器实现,如CINTCling。但因为传统上C和C++多以编译器实现,习惯上仍有一些混用,甚至至今仍出现在ISO C++某节标准库条款的标题 页面存档备份,存于上。

传统上,C++语言被视为和C语言实现性能相近的语言,强调运行时的高效。根《C++程思想》(Thinking in C++)一,C++C的代码执行效率往往相差在±5%之[2]