认识与了解 C++

"祖师爷镇楼"

目录

[一、C++ 发展历史](#一、C++ 发展历史)

[(一)起源:1979 年,需求驱动](#(一)起源:1979 年,需求驱动)

[(二)雏形:1983 年,命名与核心特性落地](#(二)雏形:1983 年,命名与核心特性落地)

[(三)普及:1983-1989 年,学术界 + 工业界双落地](#(三)普及:1983-1989 年,学术界 + 工业界双落地)

[(四)标准化:1989-1998 年,官方规范落地,STL 纳入成关键节点](#(四)标准化:1989-1998 年,官方规范落地,STL 纳入成关键节点)

(五)核心职责划分

[二、C++ 版本迭代与核心经典插曲](#二、C++ 版本迭代与核心经典插曲)

[(一)全版本迭代时间线 + 核心更新细节 + 工业界普及度](#(一)全版本迭代时间线 + 核心更新细节 + 工业界普及度)

(二)版本学习核心建议

[(三)经典插曲:C++ 官方网络库的多次推迟](#(三)经典插曲:C++ 官方网络库的多次推迟)

[三、C++ 官方参考文档及精准使用建议](#三、C++ 官方参考文档及精准使用建议)

[(一)三大核心参考文档链接 + 细节特性 + 优劣势](#(一)三大核心参考文档链接 + 细节特性 + 优劣势)

(三)精准使用建议

[四、C++ 的行业价值与核心应用领域](#四、C++ 的行业价值与核心应用领域)

[(一)行业热度:2024 年 6 月 TIOBE 排行榜核心数据](#(一)行业热度:2024 年 6 月 TIOBE 排行榜核心数据)

[(二)核心应用领域 + 技术栈 + 具体落地场景](#(二)核心应用领域 + 技术栈 + 具体落地场景)

[五、C++ 经典书籍推荐](#五、C++ 经典书籍推荐)

[(一)《C++ Primer》(第五 / 六版)](#(一)《C++ Primer》(第五 / 六版))

(二)STL源码剖析

[(三)Effctive C++](#(三)Effctive C++)


一、C++ 发展历史

C++ 由贝尔实验室的本贾尼・斯特劳斯特卢普 开发,核心是在 C 语言基础上扩展面向对象特性解决 C 语言在复杂软件开发中的不足

发展历程分起源 - 雏形 - 普及 - 标准化四个阶段,每个阶段均有明确的背景和成果。

(一)起源:1979 年,需求驱动

本贾尼在贝尔实验室从事Unix 系统开发 ,负责模拟和操作系统类复杂软件开发任务,发现 C 语言在表达能力、可维护性、可扩展性上存在明显短板,无法高效应对大型项目开发,因此萌生了 "在 C 语言基础上扩展新特性" 的想法,而非从零开发新语言。

(二)雏形:1983 年,命名与核心特性落地

1、本贾尼在 C 语言中正式添加类、封装、继承三大面向对象核心概念,完成 C++ 雏形设计;

2、该语言被正式命名为C++,标志着 C++ 从 "C 语言扩展版" 成为独立的编程语言雏形。

(三)普及:1983-1989 年,学术界 + 工业界双落地

**1、**学术界:各大高校、研究所将 C++ 作为教学和研究的首选语言,推动其语法、库的完善;

**2、**工业界:各类企业开始在产品开发中尝试使用 C++,反馈的问题推动 C++标准库、模板等特性进一步优化;

**3、**核心成果:C++ 从实验室走向实际开发,成为具备实用价值的编程语言。

(四)标准化:1989-1998 年,官方规范落地,STL 纳入成关键节点

标准化是 C++ 从 "个性化语言" 走向 "国际通用语言" 的核心,由 ANSI(美国国家标准学会)和 ISO(国际标准化组织)联合推进,核心节点和细节如下:

1、1989 年

成立 ANSI/ISO 联合标准化委员会,正式启动 C++ 标准化工作,明确核心目标:规范 C++ 语法、库,实现跨编译器、跨平台的兼容性;

2、1994 年

委员会提出首个 C++ 标准化草案,保留本贾尼最初定义的所有特性,并新增部分实用特性;

3、STL 纳入,延缓标准化进程

STL(标准模板库)由惠普实验室的 Alexander Stepanov、Meng Lee、David RMusser开发,是一套包含栈、队列、容器、算法的模板库,能大幅减少开发工作量(无需重复造轮子);

委员会投票通过将 STL 纳入 C++ 标准的提议,但因 STL 超出 C++ 最初定义范围,且早期 STL 未完全规范,导致标准化进程推迟;

4、1997 年 11 月 14 日

联合委员会通过 C++ 标准最终草案;

5、1998 年

C++98 正式发布,成为首个 ANSI/ISO 官方标准,标志着 C++ 进入规范化、国际化阶段。

(五)核心职责划分

标准化委员会仅负责制定 C++ 语法和库的标准,不负责落地实现;

编译器厂商(如微软 VS、Linux 下的 g++、苹果编译器)需按照标准,在自家编译器中实现对应的语法和库支持,这也是后续新标准普及滞后的核心原因。

二、C++ 版本迭代与核心经典插曲

C++ 自 1998 年标准化后,持续进行版本迭代,分重大里程碑版本小版本修订 / 扩展,编译器对新标准的支持存在明显滞后性,工业界主流仍为早期稳定版本。同时 C++ 发展过程中存在经典的 "网络库推迟" 插曲,是开发者社区的热议话题,核心细节如下:

(一)全版本迭代时间线 + 核心更新细节 + 工业界普及度

每个版本的更新重点、定位和普及度均有明确差异,C++98 和 C++11 是必学核心版本,新版特性按需学习即可,具体细节如下表:

|--------------|------------|-----------------------------------------------------------------------------|--------------|------------------|
| 发布年份 | 版本 | 核心更新细节 | 版本定位 | 工业界普及度 |
| 1998 | C++98 | ① 首个国际标准 ② 以模板方式重写 C++ 标准库 ③ 正式引入 STL 标准模板库 ④ 绝大多数编译器支持 | 基础核心版本,语法基石 | 100% 全行业普及 |
| 2003 | C++03 | ① 修复 C++98 的语法错误和漏洞 ② 少量新特性(如 tr1 库) ③ 侧重稳定性和兼容性 | 小版本修订,兼容优化 | 100% 随 C++98 普及 |
| 2011 | C++11 | ① 革命性更新 ② 新增 lambda 表达式、范围 for、右值引用 / 移动语义、智能指针、标准线程库、变长模板参数 ③ 优化 STL 容器和算法 | 核心版本,功能大幅升级 | 95% 以上 工业界主流 |
| 2014 | C++14 | ① 修复 C++11 漏洞 ② 优化泛型 lambda 表达式、返回值类型推导 ③ 新增二进制字面常量 | 对C++11的补充扩展 | 80% 左右 部分企业使用 |
| 2017 | C++17 | ① 新增 if constexpr、折叠表达式、结构化绑定、并行算法 ② 改进 string、filesys 等标准库 ③ 增强语言表达能力 | 中等规模更新,功能增强 | 60% 左右 中大厂部分项目使用 |
| 2020 | C++20 | ① 重大里程碑 ② 引入协程、概念、模块化、Ranges 库 ③ 为 C++ 未来发展奠基 | 前瞻性版本,功能革新 | 30% 左右 仅头部大厂试水 |
| 2023 | C++23 | ① 小版本完善 ② 新增 if consteval、flat_map、import std 导入标准库 ③ 优化现有特性 | 细节完善,体验提升 | 10% 以内 几乎未普及 |
| 2026 | C++26 | ① 制定中 ② 核心规划:引入官方网络库;完善 C++20/23 的前瞻性特性 | 功能补全,生态完善 | 未发布 无普及度 |

(二)版本学习核心建议

1、优先精通 C++98 和 C++11

两个版本是工业界主流,覆盖 95% 以上的开发场景,也是后续版本的基础;

2、新版特性按需学习

C++17/20/23 的特性仅在头部大厂的特定项目中使用,若入职企业有需求再针对性学习;

3、注意编译器兼容

如 VS2019 不支持 C++23 的 import std 特性,开发时需根据编译器版本选择对应语法。

(三)经典插曲:C++ 官方网络库的多次推迟

C++ 长期被开发者诟病缺乏官方网络库(Networking),原计划在 C++23 中引入,最终确定推迟至 C++26,背后有明确的客观原因和技术争议,核心细节如下:

1、推迟的核心原因

**(1)客观原因:**新冠疫情导致标准化委员会的线下会议取消,线上会议沟通效率低,核心的 Executors(执行器)模块迟迟无法达成共识;

**(2)****技术争议:**Bryce Adelstein Lelbach 及其盟友强推 senders/receivers 方案,与原本接近落地的 Asio 方案产生激烈冲突,双方无法说服对方,最终 Asio 方案受阻;

**(3)连锁反应:**Executors 是网络库的基础,其讨论受阻直接导致网络库整体推迟至 C++26。

2、目前工业界的替代方案

依赖第三方网络库Asio,但 Asio 的核心问题是文档不完善,导致学习和使用成本高;

3、后续规划

本贾尼本人对网络库高度重视,将其列为 C++26 的核心优先级,标准化委员会(WG21)也明确表示会推进该功能落地;

4、开发者社区态度

多数开发者表示理解,认为 C++ 的特性设计是 "为未来 50 年准备",3 年的推迟在 C++ 发展中属于正常情况。

三、C++ 官方参考文档及精准使用建议

学习 C++ 必须结合易读的第三方文档权威的官方文档,课程推荐 3 个核心链接,各有优劣、互补使用,同时明确使用场景和技巧,核心细节如下:

(一)三大核心参考文档链接 + 细节特性 + 优劣势

1、https://legacy.cplusplus.com/reference/

**(1)文档性质:**第三方维护(非官方)

(2)核心特性:标准仅更新至 C++11;支持 C 语言库查询;以头文件形式组织内容

**(3)优点:**易读易懂,快速定位函数

**(4)缺点:**标准滞后;内容非权威

2、https://zh.cppreference.com/w/cpp

**(1)文档性质:**官方文档中文版

**(2)核心特性:**信息全;更新至最新标准(含 C++23/26 规划);覆盖所有语法和库

**(3)优点:**中文阅读,无语言障碍

**(4)缺点:**排版不如第三方文档;部分翻译略生硬

3、https://en.cppreference.com/w/

**(1)文档性质:**官方文档英文版

**(2)核心特性:**最权威;含所有版本更新细节、前沿特性、标准草案;C++26 最新规划实时更新

**(3)优点:**权威准确,前沿内容齐全

**(4)缺点:**英文阅读,对新手有一定难度

(三)精准使用建议

1、入门阶段

以**legacy.cplusplus.com** 为主,搭配官方中文版,快速上手语法和库的使用;

2、进阶 / 工作阶段

官方英文版为主,搭配中文版辅助,养成阅读英文技术资料的习惯(前沿技术、开源库文档均为英文);

3、工具技巧

将三个链接全部添加至浏览器书签,开发时根据需求快速切换;

4、避坑提醒

不要将第三方文档作为权威依据,遇到语法争议时,以官方英文版文档为准。

四、C++ 的行业价值与核心应用领域

C++ 是近 20 年始终占据主流的编程语言,在性能要求高、底层控制强的场景中无可替代,其行业热度和应用领域均有明确的数据分析和实际落地场景,同时配套明确的就业方向和策略,核心细节如下:

(一)行业热度:2024 年 6 月 TIOBE 排行榜核心数据

TIOBE 排行榜反映编程语言的热门程度,统计维度包括互联网程序员数量、课程数量、第三方厂商、搜索引擎(Google、百度、Bing 等),2024 年 6 月核心数据如下:

1、C++ 排名第二 ,评分10.03%,仅次于 Python(15.39%),高于 C 语言(9.23%)、Java(8.40%);

2、C++与C 语言合计评分19.26%,是所有编程语言中合计热度最高的;

3、近 20 年 C++ 始终位列 TIOBE 排行榜前 5,从未退出主流,核心原因是其极致的性能和底层控制能力无法被替代。

(二)核心应用领域 + 技术栈 + 具体落地场景

C++ 的核心优势是高性能、高效率、底层硬件交互能力强,适用于对性能和实时性要求高的场景,覆盖 8 大核心领域,每个领域均有具体的技术栈和落地案例,细节如下:

1、大型系统软件开发

**(1)落地场景:**编译器、数据库、操作系统、浏览器内核;

**(2)核心要求:**底层控制能力、高稳定性、高兼容性。

2、音视频处理

**(1)落地场景:**直播、点播、短视频、音视频编解码;

**(2)核心技术栈:**C++(核心)+FFmpeg、WebRTC、Mediasoup、ijkplayer(开源库);

**(3)备注:**音视频开发的核心技术栈为 C++,无其他替代语言。

3、PC 客户端开发

**(1)落地场景:**Windows 桌面软件(如 WPS、QQ、编译器);

**(2)核心技术栈:**C+++QT(跨平台 C++ GUI 框架,主流)/MFC;

**(3)适用企业:**军工企业、中小企业、传统软件公司。

4、高并发服务端开发

**(1)落地场景:**游戏服务器、流媒体服务、金融量化高频交易;

**(2)核心要求:**高并发、低延迟、高性能;

**(3)备注:**Java 是服务端主流,但 C++ 在高性能场景中无可替代。

5、游戏引擎开发

**(1)落地场景:**端游、手游、3A 游戏的引擎开发;

**(2)核心技术栈:**C+++UE4、Cocos2d-x(开源游戏引擎);

**(3)附加要求:**掌握图形学、数据结构。

6、嵌入式开发

**(1)落地场景:**智能手环、摄像头、扫地机器人、车载系统、门禁系统;

**(2)分类:**嵌入式应用开发、嵌入式驱动开发;

**(3)备注:**C++ 仅覆盖部分嵌入式岗位,完整嵌入式开发需补充 ARM、STM32、单片机知识。

7、机器学习引擎开发

**(1)落地场景:**AI 模型的底层算法实现、机器学习框架开发;

**(2)技术分层:**C++ 实现底层高效算法,Python 做上层封装和模型训练;

**(3)备注:**仅做模型训练学 Python 即可,做机器学习系统开发必须学 C++。

8、测试开发 / 性能测试

**(1)落地场景:**研发团队的自动化测试、性能测试、测试工具开发;

**(2)核心技术栈:**C+++Selenium、Jmeter(测试工具);

**(3)工作内容:**设计测试用例、编写自动化测试脚本、开发内部测试工具、分析性能数据。

五、C++ 经典书籍推荐

(一)《C++ Primer》(第五 / 六版)

主要讲解语法,经典的语法书籍,前后中期都可以看。前期如果自学看可能会有点晦涩难懂,能看懂多少看懂多少,就当预习,学了比特课程后,中后期作为语法字典,非常好用。

(二)STL源码剖析

主要从底层实现的角度结合STL源码,庖丁解牛式剖析STL的实现,是侯捷老师的经典之作。可以很好的帮助我们学习别人用语法是如何实现出高效简洁的数据结构和算法代码,如何使用泛型封装等。让我们不再坐井观天,闭门造车,本书课程上一半以后,中后期可以看。

(三)Effctive C++

本书也是侯捷老师翻译的,本书有的一句评价:"把C++程序员分为看过此书的和没看过此书的"。本书主要讲了55个如何正确高效使用 C++ 的条款,建议中后期可以看一遍,工作 1-2 年后再看一遍,相信会有不一样的收获。

相关推荐
AI科技星2 小时前
从v=c螺旋时空公理出发的引力与电磁常数大统一
c语言·开发语言·人工智能·线性代数·算法·矩阵·数据挖掘
古城小栈2 小时前
Rust跨平台编译打包 之 三大战役
开发语言·后端·rust
冰暮流星2 小时前
javascript里面的return语句讲解
开发语言·前端·javascript
TsukasaNZ2 小时前
代码性能剖析工具
开发语言·c++·算法
J987T2 小时前
C语言、微机原理等
c语言·开发语言
lly2024062 小时前
Ruby 注释
开发语言
dapeng28702 小时前
C++中的观察者模式变体
开发语言·c++·算法
jing-ya2 小时前
day 54 图论part6
java·开发语言·数据结构·算法·图论
笨笨马甲2 小时前
Qt 嵌入式开发
开发语言·qt