C++的历史

来自cppreference.com
< cpp‎ | language
 
 
C++语言
表达式
替代表示
字面量
布尔型 - 整型 - 浮点型
字符型 - 字符串 - nullptr (C++11)
用户定义 (C++11)
Utilities
属性 (C++11)
Types
typedef声明
类型别名声明 (C++11)
Casts
隐式类型转换 - 显示类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
explicit (C++11)
static
静态成员函数
模板
杂项
C++的历史
 

目录

[编辑] Early C++

  • 1979:带有类的C的第一个实现
  1. 新特征:成员函数派生类,编译分离,共有和私有的访问控制友元,函数参数的类型检查,默认参数内联函数重载赋值运算符构造函数析构函数,f()与f(void)的含义相同,call-function 和 return-function(同步功能,并非C++的一部分)
  2. 库:并行任务库(并非C++的)
  • 1982:带有类的C的参考手册发布
  • 1984:实现C84,并发布参考手册
  • 1985:Cfront 1.0
  1. 新特征:虚函数,函数与运算符重载引用newdelete运算符,const关键字,作用域解析运算符
  2. 增加库:complexstringiostream
  • 1985:The C++ Programming Language,第一版
  • 1987:GCC 1.15.3 加入C++支持
  • 1989:Cfront 2.0
  1. 新特征:多重继承指向成员的指针保护访问控制,类型安全的链接性,抽象类staticconst成员函数,类成员的newdelete
  2. 增加库:I/O格式控制
  • 1990:The Annotated C++ Reference Manual

本书介绍了语言的设计,包括了一些没有被实现的功能。在ISO标准之前,本书被当作C++的标准。

  1. 新功能:命名空间异常处理嵌套类
  • 1991:Cfront 3.0
  • 1991:The C++ Programming Language,第二版

[编辑] Standard C++

  • 1990 ANSI C++委员会成立
  • 1991 ISO C++委员会成立
  • 1992 在C++中实现了STL
  • 1998 C++98(ISO/IEC 14882:1998)
  1. 新特征:RTTI(dynamic_casttypeid),协变返回类型类型转换运算符mutablebool,条件语句中的声明,模板实例化成员模板,export
  2. 增加库:容器算法迭代器函数对象(基于STL),区域设置bitsetvalarrayauto_ptr模板stringiostreamcomplex.
  • 1998 The C++ Programming Language,第三版
  • 1999 委员会成员成立了Boost,用以为标准提供高质量库候选。
  • 2003 C++03(ISO/IEC 14882:2003)

这是一个小修订,仅提供比一个技术勘误表略多的内容

  1. 新特征:值初始化
C++03修复的缺陷报告(92个关于核心语言,125个关于库)

这一技术报告讨论的许多C++的抽象的性能代价,并提供了实现指导;讨论了在嵌入式系统中的C++使用,并为C语言的ISO/IEC TR 18037:2008 <iohw.h>提供了<hardware>接口。

  • 2007 库扩展技术报告(TR1)(ISO/IEC TR 19768:2007) (ISO商店)(2005草案

本技术报告是对C++库的扩展,为标准库添加了以下库:

  1. 来自Boost:引用包装器智能指针成员函数result_of绑定function类型特性随机数,特殊数学函数,元组数组无序容器(包括哈希),和正则表达式.
  2. 来自C99:math.h中的新数学函数,空白字符类浮点环境十六进制浮点I/O格式控则定长整数类型long long类型va_copysnprintf()vfscanf()系列函数,printf()scanf()系列函数中C99新增的类型控制符。

除了特殊函数,C++11包含了本技术报告中的全部内容,并进行了少量修改。

本技术报告是对C++标准库的扩展,包括在上一技术报告中没有进入C++11的特殊数学函数:椭圆积分,指数积分,拉盖尔多项式,勒让德多项式,埃尔米特多项式,贝塞尔函数,纽曼函数,贝塔函数,黎曼ζ函数.

加入了大量的修改,既包括对已有的行为的标准化,也包括对已有的C++抽象的改进

  1. 新语言特征:autodecltype,默认的与禁用的函数,finaloverride后置返回类型右值引用移动构造函数/移动赋值运算符带有作用域的枚举constexpr字面量类型列表初始化委托构造函数继承构造函数,使用=或大括号初始化,nullptrlong longchar16_t和char32_t类型别名可变参数模板一般化的联合一般化的PODUnicode字符串字面量用户定义字面量属性lambda表达式noexceptalignofalignas,多线程内存模型,thread-local存储持续期垃圾回收接口用于范围的for(基于Boost库),静态断言(基于Boost库)
  2. 新库特征:原子操作,emplace()与整个库中对右值引用的支持,std::initializer_list,有状态的与作用域中的分配器,forward_list日期时间库有理数库,新算法,Unicode编码转换facets
  3. 来自TR1:除特殊函数之外的全部
  4. 来自Boost:线程库exception_ptrerror_codeerror_condition,改进的迭代器(std::beginstd::endstd::nextstd::prev
  5. 来自C:C风格Unicode转换函数
C++11修复的缺陷报告(741个关于核心语言,685个关于库)
  • 2011 十进制浮点数技术报告(ISO/IEC TR 24733:2011)(ISO商店)(2009草案

这个技术报告实现了IEEE 754-2008中十进制浮点数类型及浮点运算:std::decimal::decimal32,std::decimal::decimal64,std::decimal::decimal128.

对C++标准的小修订

  1. 新语言特征:可变参数的模板多态的lambda,lambda捕获表达式,new/delete省略,放松对constexpr函数的要求二进制常量,数字分隔符,函数返回类型推导,对含有初始化式的类的聚合初始化
  2. 新库特征:std::make_uniquestd::shared_timed_mutexstd::shared_lockstd::integer_sequencestd::exchangestd::quoted,以及对已有库功能的许多小的改进,例如某些算法可以接受连个区间,别名版本的类型特性,用户定义的字符串,持续时间,复数字面量,等。
C++14中修复的缺陷报告(276个有关核心语言,149个有关库)

这一技术规范是对C++标准库的一个实验性扩展,规定了一个文件系统库。该库基于boost.filesystem V3,并进行了一些修改

这一技术规范为所有库算法标准化了并行及向量并行API,同时加入了一些新的算法,例如reducetransform_reduceexclusive_scan

这一个技术规范扩展了C++的核心语言,增加了同步的和原子的快,以及事务函数,实现了事务内存的语义.

  • 2015 对基本库的扩展技术规范(ISO/IEC TS 19568:2015)(ISO商店)(2015草案

这一技术规范为C++标准库增加了新的成员:optionalanystring_viewsamplesearchapply多态内存分配,以及为类型特征增加了变量模板

这个一技术规范对C++核心语言进行了扩展,增加了概念(称作类型需求)以及限制(限制模板、函数以及变量声明中可以使用的类型),为元编程提供帮助,并简化对模板实例化的诊断,参考概念

[编辑] 未来的开发

C++标准的下一个大版本更新

  1. 语言更新:折叠表达式,u8字符,简化的嵌套命名空间,使noexcept成为类型系统的一部分,__has_include。移除了三字符,register关键字,bool自增
  2. 库更新:连续迭代器,非成员的size/empty/data,try_emplace,insert_or_assign,uncaught_exceptions,可变参数lock_guard,as_const,conjunction/disjunction/negation,类型特征变量,透明的owner_less,持续时间和时间点的近似函数。去掉了auto_ptr,弃用的函数对象,弃用的iostreams别名。

[编辑] 另请参阅

C语言的历史C文档

[编辑] External links