C++ 的历史
早期 C++
- 1979:首次实现“带类的 C(C with Classes)”
- 新特性:类,成员函数,派生类,分离编译,公开与私有访问控制,友元,函数实参的类型检查,默认实参,内联函数,重载赋值运算符,构造函数,析构函数,f() 与 f(void) 相同,调用的函数与返回的函数(同步特性,不在 C++ 中)
- 库:并发任务库(不在 C++ 中)
- 1982:出版 C with Classes 参考手册
- 1984:实现 C84,出版参考手册
- 1985:Cfront 1.0
- 1985:《C++ 程序设计语言》(The C++ Programming Language),第1版
- 1986:"whatis?" 提案将剩余的设计目标写入文档,包含多继承,异常处理和模板。
- 1987:GCC 1.15.3 中加入 C++ 支持
- 1989:Cfront 2.0
- 1990:《带标注的 C++ 参考手册》(The Annotated C++ Reference Manual)
此书按设计描述语言,包含一些仍未实现的特性。它在 ISO 标准前作为事实标准。
- 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)
- 新特性:RTTI(
dynamic_cast
、typeid
),协变返回类型,转型运算符,mutable
,bool
,条件中的声明,模板实例化,成员模板,export - 库添加:本地环境,bitset,valarray,auto_ptr,以及模板化的字符串,输入/输出流和复数。
- 基于 STL:容器,算法,迭代器,函数对象
- 1998:《C++ 程序设计语言》(The C++ Programming Language),第3版
- 1999:委员会成员成立 Boost 以为标准产生高质量的候选库。
- 2003:
C++03
(ISO/IEC 14882:2003)
这是一个次要版本,有意稍多于一个技术更正版本
- 新特性:值初始化
此 TR 讨论各种 C++ 抽象的成本,提供实现指引,讨论 C++ 在嵌入式系统中的使用,并引入到 C 的 ISO/IEC TR 18037:2008 <iohw.h>
的 <hardware>
接口。
此 TR 是 C++ 标准库扩展,它添加下列内容到 C++ 标准库:
- 来自 Boost:引用包装器,智能指针,成员函数,result_of,bind,function,类型特征,随机数,数学特殊函数,tuple,array,无序容器(包含 hash),和正则表达式。
- 来自 C99:C99 中新的来自
<math.h>
的数学函数,空白字符类,浮点环境,hexfloat I/O 操纵符,固定大小整型类型,long long
类型,va_copy,snprintf() 和 vfscanf() 函数族,及 printf() 和 scanf() 函数族的 C99 转换指定。
除了特殊函数之外的所有 TR1 功能都被包含于 C++11 中,有少量更改。
此国际标准是 C++ 标准库扩展,它添加了曾为 TR1 的一部分,但未包含于 C++11 的特殊函数:椭圆积分,指数积分,拉盖尔多项式,勒让德多项式,埃尔米特多项式,贝塞尔函数,诺依曼函数,beta 函数以及黎曼 zeta 函数。此标准被并入 C++17。
C++11 时期
- 2011:
C++11
(ISO/IEC 14882:2011)(ISO 商店)(2012 出版后草案)。
其中引入了大量更改,以标准化既存实践,并改进 C++ 程序员可用的抽象
此 TR 实现来自 IEEE 754-2008 《浮点算术标准》的十进制浮点类型:std::decimal::decimal32
、std::decimal::decimal64
及 std::decimal::decimal128
。
- 2012:标准 C++ 基金会成立
- 2013:《C++ 程序设计语言》(The C++ Programming Language),第4版
C++14 时期
C++ 标准的次要版本
此 TS 是实验性 C++ 库扩展,它指定基于 boost.filesystem V3 的文件系统库(有一些修改和扩充)。此 TS 被并入 C++17。
此 TS 为所有标准库算法标准化了并行和向量并行 API,还添加了新算法,例如 reduce
、transform_reduce
和 exclusive_scan
。此 TS 被并入 C++17。
此 TS 扩展了 C++ 核心语言,添加同步和原子块以及事务安全函数,以实现事务性内存语义。
此 TS 添加数个新组件到 C++ 标准库:optional,any,string_view,sample,search,apply,多态分配器,和类型特征的变量模板。此 TS 被并入 C++17。
此 TS 扩展了 C++ 核心语言,添加概念(具名类型要求)和制约(模板、函数和变量声明中对允许的类型施加的限制),这有助于元编程并简化模板实例化诊断,见概念。此 TS 已并入 C++20,并有所省略。
此 TS 扩展 C++ 库以包含针对 std::future,闩与屏障,以及原子智能指针的数个扩展。
C++17 时期
- 2017:
C++17
(ISO 商店)(ANSI 商店)(n4659 2017-03-21 最终草案)
C++ 标准继 C++11 之后的主要版本
此 TS 扩展 C++ 库,以包含范围——一个新的、更有力的取代迭代器对的抽象,以及范围视图,哨位范围,用于就地变换的投影,新的迭代器适配器及算法。此扩展最终使得能以 sort(v); 排序 vector。
此 TS 扩展 C++ 核心语言及标准库,以包含无栈协程(可恢复函数)。它添加了关键词 co_await、co_yield 及 co_return。
此 TS 扩展 C++ 库,以包含基于 boost.asio 的 TCP/IP 网络。
此 TS 扩展 C++ 核心语言以包含模块。它添加了特殊标识符 module、import,并重新引入带新含义的关键词 export。
此 TS 扩展 C++ 库,使之包含二个新执行策略(unseq 与 vec),添加 reduction_plus 或 for_loop_strided 之类的并行算法,分支合并式并行任务的任务块,SIMD 类型及这些类型上的操作。
C++20 时期
- 2020:C++20 (ISO 商店)(n4860 2020-03-31 最终草案)
C++ 标准继 C++17 后的主要版本
此 TS 扩展 C++ 加入一些设施,用于检查程序实体信息:变量,枚举,类及其成员,lambda 及其捕获,等等
未来发展
- 实验性技术规范
- 2026:C++ 最新草案 n4988 (2024-08-14)
C++ 标准的下个主要版本。
参阅
外部链接
C++ 的历史:1979-1991 | |
语言在真实世界中为之演化:C++ 1991-2006,中文翻译(共分为七篇博文),中文翻译 PDF 下载 | |
在拥挤和变化的世界中茁壮成长:C++ 2006-2020,中文翻译 | |
标准 C++ 基金会 | |
维基百科上的 C++ | |
C++ 标准委员会 |