C++ 11是什么,C++ 11标准的由来

C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。


图 1 C++之父,Bjarne Stroustrup

Simula 语言被认为是第一个面向对象的编程语言。Stroustrup 也非常赞赏 Simula 语言的这种特性,但由于实例开发中 Simula 语言的执行效率太低,所以此后不久,Stroustrup 开始从事“带类的C”编程语言的开发工作。

注意在开发初期,并没有 C++ 这个称谓。所谓“带类的C”,顾名思义就是在 C 语言的基础上,为其加入面向对象的思想(扩增一些写好的类和对象)。初期的 C++ 除了具备 C 语言的所有功能外,还具有类、基本继承、内联函数、默认函数参数以及强类型检查等简单功能。

不仅如此,Stroustrup 还在 CPre(C语言编译器)的基础上,专门为“带类的C”开发了一个编译器,称为 Cfront,它可以将带有类的 C 代码自动转换为普通 C 语言程序。值得一提的是在 1993 年,Cfront 因难以支持 C++ 异常机制被弃用。

1983 年,“带类的C”正式被称为“C++”,其中“++”就取自 C 语言中的“++”运算符,这也从侧面表明了 Stroustrup 对于 C++ 这门编程语言的定位。 与此同时,C++还增添了很多功能,比如虚函数、函数重载、引用、const 关键字以及 // 注释符号等。

在随后的几年时间里,C++ 得到了快速地发展。比如说, C++ 不断地被更新,类中增加了受保护成员(protected)和私有成员(private),并允许使用多继承等;Stroustrup 出版了 《带注释的C++参考手册》一书,其一度被当做 C++ 开发的重要参考;Borland 发布了 Turbo C ++编译器,该编译器包含有大量的第三方 C++ 库,极大便利了 C ++ 的开发,等等。

直到 1998 年,C++ 标准委员会发布了第一版 C++ 标准,并将其命名为 C++ 98 标准。据不知名人士透露,《带注释的C++参考手册》这本书对 C++ 98 标准的制定产生了很大的影响。

经过作者的不断迭代,一本书往往会先后发布很多个版本,其中每个新版本都是对前一个版本的修正和更新。C++ 编程语言的发展也是如此。截止到目前(2020 年),C++ 的发展历经了以下 3 个个标准:
  • 2011 年,新的 C++ 11 标准诞生,用于取代 C++ 98 标准。此标准还有一个别名,为“C++ 0x”;
  • 2014 年,C++ 14 标准发布,该标准库对 C++ 11 标准库做了更优的修改和更新;
  • 2017 年底,C++ 17 标准正式颁布。

所谓标准,即明确 C++ 代码的编写规范,所有的 C++ 程序员都应遵守此标准。

值得一提的是在 C++ 11 标准之前,C++ 标准委员会还在 2003 年对 C++ 98 标准做了一次修改(称为 C++ 03 标准),但由于其仅仅修复了一些 C++ 98 标准中存在的漏洞,并未修改核心语法,因此人们习惯将这次修订和 C++ 98 合称为 C++98/03 标准。

以上 3 个标准中,相比对前一个版本的修改和更新程度,C++ 11 标准无疑是颠覆性的,该标准在 C++ 98 的基础上修正了约 600 个 C++ 语言中存在的缺陷,同时添加了约 140 个新特性,这些更新使得 C++ 语言焕然一新。读者可以这样理解 C++ 11 标准,它在 C++ 98/03 标准的基础上孕育出了全新的 C++ 编程语言,造就了 C++ 新的开始。

那么,C++ 11 标准到底包含哪些新特性呢?别急,接下来会分篇给大家做详细地讲解。