C++发展史:从C with Classes到现代编程语言
C++发展史:从C with Classes到现代编程语言
C++是一种结合了低级和高级语言特性的面向对象编程语言,由丹麦计算机科学家Bjarne Stroustrup在贝尔实验室(现为诺基亚贝尔实验室)开发。它最初被称为“C with classes”,在1983年更名为C++。C++的发展历程见证了其从一个简单的C语言扩展到一个功能强大的现代编程语言的演变过程。
C++的起源
C++的起源可以追溯到1979年,当时Bjarne Stroustrup正在为他的博士学位论文进行一些开发工作。在这一过程中,他接触到了Simula语言,这是一种主要用于模拟的编程语言。Simula 67语言是Stroustrup所使用的一个变体,被认为是第一个支持面向对象编程范式的语言。Stroustrup发现这种范式对于软件包开发非常有用,但Simula语言的运行速度太慢,无法用于实际应用。
C with Classes的诞生
不久之后,Stroustrup开始开发“C with Classes”,正如其名所示,这是一个C语言的超集。他的主要目标是将自己创建的高级面向对象编程特性添加到C语言中,同时保持C语言的可移植性、便携性和紧凑性,而不牺牲速度或低级实用性。他的编程语言包含了内联、基本继承、默认函数参数、类和可靠的类型检查,以及C语言的所有功能。
第一个C with Classes编译器被称为Cfront,它源自一个名为CPre的C编译器。Cfront是一个将C with Classes代码转换为通用C的程序。一个值得注意的有趣特点是Cfront主要是用C with classes编写的,使其成为一个自举编译器(能够编译自己的编译器)。尽管Cfront在1993年被放弃,因为它变得难以整合新特性,特别是C++异常,但它对未来编译器的实现和UNIX操作系统产生了重大影响。
C++的命名与演变
在1983年,该语言的名称从C with Classes更改为C++。在C语言中,++运算符是用于递增变量的运算符,这反映了Stroustrup对这门编程语言的看法。在这一点上,添加了许多新特性,最值得注意的是虚函数、函数重载、使用const关键字的引用、以及单行注释(这个特性是从语言BCPL中借鉴来的)。
C++的商业化与标准化
1985年,Stroustrup关于该语言的著作《The C++ Programming Language》出版并发布。同年,C++被作为商业产品实施,标志着其商业化历程的开始。尽管C++尚未正式标准化,但该书成为重要的参考文献。1989年,C++进行了更新,增加了受保护和静态成员,以及从多个类和类的多重继承。
1990年,发布了《The Annotated C++ Manual》作为参考。同年,Borland的Turbo C++编译器也被作为商业产品发布。Turbo C++增加了许多其他库,对C++的发展产生了重大影响。尽管Turbo C++的最后一个稳定版本发布于2006年,但该编译器仍然被广泛使用。
C++的标准化进程
1998年,C++标准委员会发布了第一个国际标准C++ ISO/IEC 14882:1998,通常被称为C++98。《The Annotated C++ Manual》被认为是制定标准的重要影响因素。标准模板库(也称为标准模板库)始于1979年的智力构建,也被包含在内。2003年,委员会解决了1998年标准中的一些问题,并相应地修订了标准。修订后的语言被称为C++03。
2005年,C++标准委员会发布了一个技术报告(称为TR1),具体说明了他们计划为最新C++标准添加的特性。新标准被非正式地称为C++0x,因为预计将在本十年末之前发布。然而,具有讽刺意味的是,新标准直到2011年中期才完成。在此期间发布了多个技术报告,一些编译器开始添加对新特性和功能的实验性支持。
C++11的重大更新
2011年中期,新的C++标准(被称为C++11)完成。Boost库项目对新标准产生了重大影响,其中一些新模块直接来自相应的Boost库。新标准中包含的一些新特性包括:
- 新的for循环语法,提供了类似于其他语言中foreach循环的便利性
- 标准线程库(在2011年之前,C和C++都缺乏这个特性)
- 可变模板
- 自动类型推断(auto)关键字
- 新的仪器类和类
- 新的C++时间库、原子支持
- 综合组织库
- 正则表达式支持
- 对联合和数组初始化列表的支持增强
C++20的创新
2020年,新的C++标准C++20最终确定,为语言带来了大量重要的新特性和改进。许多新功能受到了之前提案和C++社区反馈的影响。以下是C++20中引入的一些关键特性:
- 概念
- 范围库
- 协程
- 模块
- 日历和时区库
- constexpr svector和std::string
- 模板参数列表的lambda
- 三向比较运算符(<=>)
- 扩展的std::span
- 新的std::format库
C++23的发布
C++23是C++的最新版本,于2024年发布。这是一个小版本更新,主要改进了C++的现代、高效和多功能编程能力。
C++的现状
根据TIOBE Index 2019年的最新研究,C++仍然是第三大最受欢迎的编程语言,仅次于Java和C,取代了Python。所有这些成就都归功于新发布的C++11版本,用户认为它使语言更加健壮、安全、简单、易于使用和表达力更强。
C++的主要特点
C++之所以如此迷人,是因为它结合了C语言的速度和高级语言的功能,可以说是两者优点的完美结合。然而,对于初学者来说,C++可能比较难以掌握,同样的代码在C++中编写可能需要比Python多四倍的时间。
以下是C++的五个主要特点:
- 在竞争性编程中,C++是最常用的编程语言之一。大多数顶级程序员通常使用C++进行加密。
- STL(标准模板库):对于熟悉C语言的人来说,这是一个节省时间的工具,避免了编写如冒泡排序等基础代码。
- 运算符重载
- 多重继承。许多其他语言不具备这个功能。
- 模块化代码的能力、封装和多态性。
C++版本历史总结表
版本 | 发布日期 | 主要变化 |
---|---|---|
C++98 (ISO/IEC 14882:1998) | 1998年10月 | 第一个版本 |
C++03 (ISO/IEC 14882:2003) | 2003年2月 | 引入值初始化 |
C++11 | 2011年8月 | 引入Lambda表达式、委托构造函数、统一初始化语法、nullptr、自动类型推断和decltype、右值引用等 |
C++14 | 2014年8月 | 引入多态lambda、数字分隔符、泛化lambda捕获、变量模板、二进制整数字面量、引用字符串等 |
C++17 | 2017年12月 | 引入折叠表达式、十六进制浮点字面量、u8字符字面量、选择语句中的初始化、内联变量等 |
C++20 | 2020年3月 | 这次更新扩展了C++的功能,使其能够检查程序实体,如变量、枚举、类及其成员、lambda及其捕获等 |
C++23 | 未来发布 | C++标准的下一个主要修订版本 |