C++ 的历史

来自cppreference.com
< cpp‎ | language


 
 
C++ 语言
 

早期 C++

  • 1979:首次实现“带类的 C(C with Classes)”
  1. 新特性:成员函数派生类,分离编译,公开与私有访问控制友元,函数实参的类型检查,默认实参内联函数重载赋值运算符构造函数析构函数f()f(void) 相同,调用的函数与返回的函数(同步特性,不在 C++ 中)
  2. 库:并发任务库(不在 C++ 中)
  • 1982:出版 C with Classes 参考手册
  • 1984:实现 C84,出版参考手册
  • 1985:Cfront 1.0
  1. 新特性:虚函数,函数与运算符的重载引用newdelete 运算符, const 关键词,作用域解析运算符
  2. 库添加:复数string(AT&T 版本),输入/输出流
  • 1985:《C++ 程序设计语言》(The C++ Programming Language),第1版
  • 1986:"whatis?" 提案将剩余的设计目标写入文档,包含多继承,异常处理和模板。
  • 1987:GCC 1.15.3 中加入 C++ 支持
  • 1989:Cfront 2.0
  1. 新特性:多继承成员指针受保护访问,类型安全的连接,抽象类静态const 限定的成员函数,类特有的 newdelete
  2. 库添加:输入/输出操纵符
  • 1990:《带标注的 C++ 参考手册》(The Annotated C++ Reference Manual)

此书按设计描述语言,包含一些仍未实现的特性。它在 ISO 标准前作为事实标准。

  1. 新特性:命名空间异常处理嵌套类模板
  • 1991:Cfront 3.0
  • 1991:《C++ 程序设计语言》(The C++ Programming Language),第2版

标准 C++

  • 1990:ANSI C++ 委员会成立
  • 1991:ISO C++ 委员会成立
  • 1992:STL 以 C++ 实现

C++98/03 时期

  • 1998:C++98 (ISO/IEC 14882:1998)
  1. 新特性:RTTI(dynamic_casttypeid),协变返回类型转型运算符mutablebool,条件中的声明,模板实例化成员模板,export
  2. 库添加:本地环境bitsetvalarrayauto_ptr,以及模板化的字符串输入/输出流复数
  3. 基于 STL:容器算法迭代器函数对象
  • 1998:《C++ 程序设计语言》(The C++ Programming Language),第3版
  • 1999:委员会成员成立 Boost 以为标准产生高质量的候选库。
  • 2003:C++03(ISO/IEC 14882:2003)

这是一个次要版本,有意稍多于一个技术更正版本

  1. 新特性:值初始化
C++03 中修正的缺陷报告(核心 92 个,库 125 个)

此 TR 讨论各种 C++ 抽象的成本,提供实现指引,讨论 C++ 在嵌入式系统中的使用,并引入到 C 的 ISO/IEC TR 18037:2008 <iohw.h><hardware> 接口。

此 TR 是 C++ 标准库扩展,它添加下列内容到 C++ 标准库:

  1. 来自 Boost:引用包装器智能指针成员函数result_ofbindfunction类型特征随机数,数学特殊函数,tuplearray无序容器(包含 hash),和正则表达式
  2. 来自 C99:C99 中新的来自 <math.h> 的数学函数,空白字符类浮点环境hexfloat I/O 操纵符,固定大小整型类型long long 类型,va_copysnprintf()vfscanf() 函数族,及 printf()scanf() 函数族的 C99 转换指定。

除了特殊函数之外的所有 TR1 功能都被包含于 C++11 中,有少量更改。

此国际标准是 C++ 标准库扩展,它添加了曾为 TR1 的一部分,但未包含于 C++11 的特殊函数:椭圆积分,指数积分,拉盖尔多项式,勒让德多项式,埃尔米特多项式,贝塞尔函数,诺依曼函数,beta 函数以及黎曼 zeta 函数。此标准被并入 C++17。

C++11 时期

主条目:C++11

其中引入了大量更改,以标准化既存实践,并改进 C++ 程序员可用的抽象

此 TR 实现来自 IEEE 754-2008 《浮点算术标准》的十进制浮点类型:std::decimal::decimal32std::decimal::decimal64std::decimal::decimal128

  • 2012:标准 C++ 基金会成立
  • 2013:《C++ 程序设计语言》(The C++ Programming Language),第4版

C++14 时期

主条目:C++14

C++ 标准的次要版本

此 TS 是实验性 C++ 库扩展,它指定基于 boost.filesystem V3 的文件系统库(有一些修改和扩充)。此 TS 被并入 C++17。

此 TS 为所有标准库算法标准化了并行和向量并行 API,还添加了新算法,例如 reducetransform_reduceexclusive_scan。此 TS 被并入 C++17。

此 TS 扩展了 C++ 核心语言,添加同步和原子块以及事务安全函数,以实现事务性内存语义。

此 TS 添加数个新组件到 C++ 标准库:optionalanystring_viewsamplesearchapply多态分配器,和类型特征的变量模板。此 TS 被并入 C++17。

此 TS 扩展了 C++ 核心语言,添加概念(具名类型要求)和制约(模板、函数和变量声明中对允许的类型施加的限制),这有助于元编程并简化模板实例化诊断,见概念。此 TS 已并入 C++20,并有所省略。

此 TS 扩展 C++ 库以包含针对 std::future屏障,以及原子智能指针的数个扩展

C++17 时期

主条目:C++17

C++ 标准继 C++11 之后的主要版本

此 TS 扩展 C++ 库,以包含范围——一个新的、更有力的取代迭代器对的抽象,以及范围视图,哨位范围,用于就地变换的投影,新的迭代器适配器及算法。此扩展最终使得能以 sort(v); 排序 vector。

此 TS 扩展 C++ 核心语言及标准库,以包含无栈协程(可恢复函数)。它添加了关键词 co_awaitco_yieldco_return

此 TS 扩展 C++ 库,以包含基于 boost.asio 的 TCP/IP 网络。

此 TS 扩展 C++ 核心语言以包含模块。它添加了特殊标识符 moduleimport,并重新引入带新含义的关键词 export

此 TS 扩展 C++ 库,使之包含二个新执行策略(unseqvec),添加 reduction_plusfor_loop_strided 之类的并行算法,分支合并式并行任务的任务块,SIMD 类型及这些类型上的操作。

C++20 时期

主条目:C++20

C++ 标准继 C++17 后的主要版本

此 TS 扩展 C++ 加入一些设施,用于检查程序实体信息:变量,枚举,类及其成员,lambda 及其捕获,等等

未来发展

主条目:C++23

C++ 标准的下个主要版本。

参阅

外部链接

  C++ 的历史:1979-1991
  语言在真实世界中为之演化:C++ 1991-2006中文翻译(共分为七篇博文)中文翻译 PDF 下载
  在拥挤和变化的世界中茁壮成长:C++ 2006-2020中文翻译
  标准 C++ 基金会
  维基百科上的 C++
  C++ 标准委员会