|
| 1 | +# 语言介绍 |
| 2 | + |
| 3 | +C++的诞生源于20世纪70年代末至80年代初的编程范式变革浪潮。它旨在结合C语言的高效性与面向对象编程(OOP)的抽象能力,以应对日益复杂的系统级编程挑战。 |
| 4 | + |
| 5 | +## 历史起源 |
| 6 | + |
| 7 | +```{figure} /_static/Picture/BjarneStroustrup.jpeg |
| 8 | +:width: 256px |
| 9 | +:align: right |
| 10 | +比雅尼·斯特劳斯特鲁普 |
| 11 | +``` |
| 12 | + |
| 13 | +C++创始人 **比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)** 在剑桥大学攻读博士期间,主攻分布式系统与仿真模拟研究,这段经历让他深刻认识到编程工具的核心痛点。 |
| 14 | + |
| 15 | +在此期间斯特劳斯特鲁普接触到了世界上首个面向对象编程语言 **Simula67(由 Ole-Johan Dahl 和 Kristen Nygaard 于 1967 年在挪威计算中心开发)**,它通过类和对象的概念实现了贴近现实的建模方式,极大提升了代码模块化与可重用性。但Simula67存在运行效率低、语法复杂的缺陷,无法满足系统级编程的性能要求。与此同时,他在分析UNIX内核时发现,主流语言C虽然高效灵活,却缺乏面向对象的抽象机制,难以应对大型系统的复杂性管理。 |
| 16 | + |
| 17 | +1979年,斯特劳斯特鲁普加入 AT&T 贝尔实验室后,开始着手解决这一矛盾。他希望创造一种兼具 C 语言高效性与面向对象表达能力的新语言。经过反复实验,他在 C 语言基础上引入面向对象特性,初步开发出 **“带类的 C”(C with Classes)**,并基于贝尔实验室的 C 编译器改造了其前端。这个早期版本的核心创新包括:引入类实现数据封装、通过继承机制实现代码复用、借助虚函数实现多态性,让语言既能支持传统过程式编程,又能进行面向对象开发。 |
| 18 | + |
| 19 | +1983年,随着语言特性的完善,斯特劳斯特鲁普将其正式命名为"C++"。"++"既代表 C 语言的自增操作,也象征着对原有语言能力的扩展与提升。这一命名由他的同事**Rick Mascitti** 提出。同年,他开发出首个C++编译器 **Cfront**,它是一个源代码到源代码的转换器(Source-to-Source Translator),通过将 C++ 代码转换为 C 代码,再利用现有的C编译器进行编译,解决了早期语言的编译落地问题。 |
| 20 | + |
| 21 | +## 发展历程 |
| 22 | + |
| 23 | +C++的发展始终围绕“零开销抽象”(Zero-overhead Abstraction)的核心理念,通过国际标准化进程不断完善,形成了清晰的版本迭代脉络。标准化工作由 ISO/IEC JTC1/SC22/WG21(C++标准委员会)负责。 |
| 24 | + |
| 25 | +**1985年**:这一年是C++发展的关键节点:Cfront 编译器 1.0 随斯特劳斯特鲁普撰写的 **《C++程序设计语言》(The C++ Programming Language)** 一同发布,这标志着 C++ 正式进入工业界应用阶段,并为语言推广提供了权威指南。 |
| 26 | + |
| 27 | +**1989年**:发布 Release 2.0 版本,引入多重继承、纯虚函数与抽象类等新特性,并进一步完善虚函数机制。同时,《The Annotated C++ Reference Manual》出版,为后续标准化奠定了基础。 |
| 28 | + |
| 29 | +**1998 年**:国际标准化组织(ISO)发布首个正式标准 **ISO/IEC 14882:1998(C++98)**,定义了核心语言与标准库框架,包含标准模板库(STL,由 Alexander Stepanov 与 Meng Lee 设计)以及修订后的 C 标准库,使 C++ 具备了稳定的跨平台能力。 |
| 30 | + |
| 31 | +**2003年**:推出C++03标准,以修复C++98的缺陷为主,提升不同编译器间的兼容性,仅新增"值初始化"这一语言特性。 |
| 32 | + |
| 33 | +**2005年**:发布技术报告TR1,虽非官方标准,但引入智能指针、哈希表、正则表达式等扩展特性,成为后续版本的重要基础。 |
| 34 | + |
| 35 | +**2011年**:C++11标准发布(又称C++0x),是语言发展的里程碑式升级。引入自动类型推导(auto)、右值引用与移动语义、Lambda表达式、智能指针(shared_ptr/unique_ptr)、基于范围的for循环,以及原生并发编程支持(std::thread、std::mutex 等),大幅提升语言的现代化程度与易用性。 |
| 36 | + |
| 37 | +**2014年**:C++14作为小型扩展版本,优化C++11的细节体验,包括泛型Lambda、函数返回类型推导、放宽constexpr函数限制等。 |
| 38 | + |
| 39 | +**2017年**:C++17标志着现代C++走向成熟,新增结构化绑定、if初始化语句、类模板参数推导(CTAD)、内联变量、文件系统库(<filesystem>)等特性,同时提供STL并行算法。 |
| 40 | + |
| 41 | +**2020年**:C++20引入革命性特性,包括替代头文件的模块(Modules)、模板约束机制(Concepts)、异步编程工具(协程)、范围库(Ranges)以及三向比较运算符(<=>)等,重塑语言的模块化与抽象能力。 |
| 42 | + |
| 43 | +**2023 年**:C++23 在 C++20 的基础上继续优化,推出标准库模块(`import std;`)、明确对象参数(deducing this)、新容器 `flat_map` / `flat_set`、错误处理工具 `std::expected`,以及格式化输出函数 `std::print` 等特性,进一步提升了编译效率与开发便捷性。 |
| 44 | + |
| 45 | +## 应用领域 |
| 46 | + |
| 47 | +C++ 理论上可以在任何平台或操作系统中运行这大大的增加了 C++ 所能应用到的领域。 |
| 48 | + |
| 49 | +- 操作系统 |
| 50 | + - 目前 Windows 操作系统的部分内核和驱动程序都是有 C++ 开发的 |
| 51 | + - MacOS 和 IOS 的部分内核组件 |
| 52 | +- 软件开发 |
| 53 | + - 在目前来看市面上大多数的桌面端软件包括客户端和服务端都是有 C++ 来完成的 |
| 54 | + - 许多游戏框架和内核也皆是有 C++ 来实现的 |
| 55 | +- 嵌入式开发 |
| 56 | + - 医疗设备 |
| 57 | + - 车机系统 |
| 58 | + - 航空设备 |
| 59 | +- 高性能计算 |
| 60 | + - 金融 |
| 61 | + - AI (例如:TensorFlow) |
| 62 | + |
| 63 | +```{Mermaid} |
| 64 | +timeline |
| 65 | + title C++ 发展历程 |
| 66 | +
|
| 67 | + 1985 : 第一个商业版本 Cfront 1.0 发布 |
| 68 | + : 《C++程序设计语言》第一版问世 |
| 69 | +
|
| 70 | + 1989 : Release 2.0 发布 |
| 71 | + : 引入多重继承、抽象类 |
| 72 | +
|
| 73 | + 1998 : C++98 - 首个 ISO 国际标准 |
| 74 | + : 正式引入标准模板库 (STL) |
| 75 | +
|
| 76 | + 2003 : C++03 - 缺陷修复与兼容性提升 |
| 77 | +
|
| 78 | + 2005 : TR1 技术报告发布 |
| 79 | + : 引入智能指针、哈希表等准标准特性 |
| 80 | +
|
| 81 | + 2011 : C++11 - "现代C++"元年的里程碑 |
| 82 | + : 引入 auto, Lambda, 右值引用, 并发支持 |
| 83 | +
|
| 84 | + 2014 : C++14 - 对 C++11 的优化与完善 |
| 85 | + : 引入泛型 Lambda, 返回类型推导 |
| 86 | +
|
| 87 | + 2017 : C++17 - 现代 C++ 走向成熟 |
| 88 | + : 引入结构化绑定, 文件系统库, 并行算法 |
| 89 | +
|
| 90 | + 2020 : C++20 - 革命性特性引入 |
| 91 | + : 引入模块 (Modules), 概念 (Concepts), 协程 (Coroutines) |
| 92 | +
|
| 93 | + 2023 : C++23 - 持续优化与改进 |
| 94 | + : 引入标准库模块 (import std;), std::expected, std::print |
| 95 | +``` |
0 commit comments