C++简介
C++标准 由ISO/IEC JTC1/SC22/WG21进行。已经出版的标准文档如下:
发布时间 | 文档 | 通称 | 备注 |
---|---|---|---|
2020 | ISO/IEC 14882:2020[5] | C++20 | |
2018 | ISO/IEC TS 21544:2018[6] | modules TS | 模块 |
2018 | ISO/IEC TS 19570:2018[7] | parallelism TS | 并行扩展 |
2018 | ISO/IEC TS 19216:2018[8] | networking TS | 网络库 |
2017 | ISO/IEC 14882:2017[9] | C++17 | 第五个C++标准 |
2017 | ISO/IEC TS 22277:2017[10] | coroutines TS | 协程库扩展 |
2017 | ISO/IEC TS 21425:2017[11] | ranges TS | 提供范围机制 |
2017 | ISO/IEC TS 19568:2017[12] | library fundamentals TS | 标准库扩展 |
2016 | ISO/IEC TS 19571:2016[13] | concurrency TS | 用于并发计算的扩展 |
2015 | ISO/IEC TS 19217:2015[14] | concepts TS | 概念库,用于优化编译期信息 |
2015 | ISO/IEC TS 19841:2015[15] | TM TS | 事务性内存操作 |
2015 | ISO/IEC TS 19570:2015[16] | parallelism TS | 用于并行计算的扩展 |
2015 | ISO/IEC TS 18822:2015[17] | filesystem TS | 文件系统 |
2014 | ISO/IEC 14882:2014[18] | C++14 | 第四个C++标准 |
2011 | ISO/IEC TR 24733:2011[19] | - | 十进制浮点数扩展 |
2011 | ISO/IEC 14882:2011[20] | C++11 | 第三个C++标准 |
2010 | ISO/IEC TR 29124:2010[21] | - | 数学函数扩展 |
2007 | ISO/IEC TR 19768:2007[22] | C++TR1 | C++技术报告:库扩展 |
2006 | ISO/IEC TR 18015:2006[23] | - | C++性能技术报告 |
2003 | ISO/IEC 14882:2003[24] | C++03 | 第二个C++标准 |
1998 | ISO/IEC 14882:1998[25] | C++98 | 第一个C++标准 |
# 维基百科
C++是一种被广泛使用的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程范式,例如过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式等。
比雅尼·斯特劳斯特鲁普博士在贝尔实验室工作期间在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%之间[1]。