【C++藏宝阁】C++介绍:从发展历程到现代应用

【C++藏宝阁】C++介绍:从发展历程到现代应用
在这里插入图片描述


🌈个人主页:聆风吟
🔥系列专栏:C++藏宝阁
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

📚专栏订阅推荐

专栏名称专栏简介
C++藏宝阁本专栏聚焦学习阶段核心知识点,深耕基础与实战,干货笔记持续更新,和大家共学共进,夯实编程功底。
数据结构手札本专栏主要是我的数据结构入门学习手札,记录个人从基础到进阶的学习总结。
数据结构手札・刷题篇本专栏是《数据结构手札》配套习题讲解,通过练习相关题目加深对算法理解。

一、初识 C++

在这里插入图片描述

C++ 是一门静态类型编译型的通用编程语言。它起源于 C 语言,由丹麦科学家 Bjarne Stroustrup 在贝尔实验室开发,早期被称为 “C with Classes”。作为 C 语言的拓展与升级,C++ 具备以下核心特征:

  • 高度兼容C:可直接复用绝大多数C语言的代码与库文件,保证了良好的生态延续性。
  • 支持多范式编程:不仅支持面向对象编程(通过类、继承、多态),还支持泛型编程(通过模板)和过程化编程,能灵活适配不同的开发场景与设计思想。
  • 强大的性能与控制力:凭借直接操作内存、高效的编译优化以及对底层硬件的操作能力,C++ 成为了对性能有极致要求领域的首选语言。
  • 丰富的现代特性:通过引入异常处理、命名空间、以及功能强大的 STL(标准模板库) 等,极大地提升了开发效率与代码质量。

正是这些特性,使得 C++ 能够在系统底层开发与高性能应用领域始终占据着不可替代的核心地位。

在这里插入图片描述

二、C++ 的发展历程与版本迭代

2.1 发展历程

第一阶段(1979 - 1983):从 C 到 “C with Classes”
C++ 的发展始于20世纪70年代末,其诞生源于对C语言功能扩展的需求 —— 当时C语言虽高效灵活,但在应对复杂大型项目时,缺乏模块化和代码复用的有效机制。1979年,丹麦计算机科学家本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)在贝尔实验室工作期间,开始着手在C语言基础上引入类(Class)概念,旨在结合C语言的高性能与Simula语言的面向对象特性,这一早期探索版本被命名为 “C with Classes”(带类的C),成为C++的雏形。

早期的C++代码示例:

// 早期的 "C with Classes" 代码classvector{int* p;int sz;public:vector(int s){ p =newint[sz = s];}// 构造函数~vector(){delete[] p;}// 析构函数int&operator[](int i){return p[i];}// 运算符重载};

第二阶段(1983-1998):命名确立与标准化奠基
1983 年,“C with Classes” 正式更名为 C++++取自 C 语言的自增运算符,寓意是 C 语言的增强版,同时新增虚函数、运算符重载、引用、常量等关键特性,解决了早期面向对象设计的诸多痛点。1985年,Bjarne Stroustrup 出版了《The C++ Programming Language》一书,系确立了 C++ 的核心语法规范,这是 C++ 首个权威参考手册,标志着 C++ 从实验室走向开发者社区。

20世纪90年代,C++进入快速发展期,大量企业和开发者参与到语言生态建设中,各类编译器(如GCC、Clang、MSVC)相继支持C++,相关的类库、开发工具也不断丰富。为解决不同实现版本之间的兼容性问题,标准化工作被提上日程,1998年,国际标准化组织(ISO)正式发布首个C++标准(C++98),标志着C++从一门实验性语言走向成熟规范的通用编程语言。此后,C++的发展始终围绕兼容历史代码提升开发效率适配新硬件场景三大核心目标,持续迭代优化。

C++98示例 - 标准化带来的变化

// C++98标准 正确使用示例(原写法C++11才支持)#include<vector>#include<algorithm>#include<iostream>intmain(){ std::vector<int> vec; vec.push_back(3); vec.push_back(1); vec.push_back(4); vec.push_back(1); vec.push_back(5); std::sort(vec.begin(), vec.end());// 算法库for(size_t i =0; i < vec.size();++i){ std::cout << vec[i]<<" ";}return0;}

2.2 版本迭代

C++ 的版本更新以国际标准化组织(ISO)发布的官方标准为核心节点,各版本均在保留向后兼容的基础上,针对性补充新特性、优化语法细节,核心版本如下:

时间阶段内容
1998年C++98C++官方第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)
2003年C++03主要针对C++98标准中的语法漏洞和歧义进行修复,仅少量细节调整,目的是提升标准的严谨性和编译器实现的一致性,确保不同平台下的代码兼容性。
2011年C++11堪称 C++ 发展的里程碑式版本,被称为 “现代 C++ 的起点”。它彻底革新了 C++ 的开发体验,新增自动类型推导auto、Lambda 表达式、右值引用(移动语义)、智能指针shared_ptr/unique_ptr、基于范围的 for 循环等核心特性,既解决了 C++ 长期被诟病的内存管理繁琐问题,又大幅提升开发效率,让 C++ 摆脱 “老旧难用” 的标签。
2014年C++14基于 C++11 做细节完善,比如支持泛型 Lambda、函数返回值自动推导、新增std::make_unique,让 C++11 的特性用起来更顺手,没有颠覆性变化。
2017年C++17进一步补充实用特性,优化大型项目开发体验。核心更新:结构化绑定(可同时获取多个变量的值)、if constexpr条件编译增强、折叠表达式简化模板编程、文件系统库(std::filesystem)标准化,同时新增并行算法库,提升多线程编程效率。
2020年C++20继 C++11 后的又一重大更新,核心解决 C++ 的 “历史包袱”。引入模块(Modules)替代传统头文件,彻底解决头文件重复包含、编译慢的问题;新增概念(Concepts)约束模板参数,让模板错误提示更清晰;支持协程(Coroutines),适配高并发异步编程;还有范围库(Ranges),让容器操作更简洁,这四大特性让 C++ 向现代化语言又迈一大步。
2023年C++23以完善C++20特性、填补功能空白为主。主要更新:标准化网络库、增强协程功能、完善范围库与文件系统库,同时优化了数值计算相关的API,进一步提升语言的工业级应用能力。
在这里插入图片描述


本系列文章将核心聚焦于当前工业界应用最为广泛的C++98C++11两大标准。通过对这两大基石性标准进行扎实系统的学习,待基础筑牢、理解通透之后,再进一步涉猎 C++14、C++17、C++20 等后续更新特性,必将迎来水到渠成的提升,达到事半功倍的学习效果。


三、C++ 编程语言排行榜

TIOBE排⾏榜是根据互联⽹上有经验的程序员、课程和第三⽅⼚商的数量,并使⽤搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语⾔的热⻔程度,并不能说明一门编程语⾔好不好,或者一门所编写的代码数量多少。

2025年12⽉TIOBE发布的编程语言排行榜

在这里插入图片描述


在这里插入图片描述

四、C++ 在工作领域中的应用

C++的应⽤领域服务器端、游戏(引擎)、机器学习引擎、⾳视频处理、嵌⼊式软件、电信设备、⾦融应⽤、基础库、操作系统、编译器、基础架构、基础⼯具、硬件交互等很多⽅⾯都有。

  1. 大型系统软件开发:如编译器、数据库、操作系统、浏览器等等
  2. ⾳视频处理:常⻅的⾳视频开源库和⽅案有FFmpeg、WebRTC、Mediasoup、ijkplayer,⾳视频开发最主要的技术栈就是C++。
  3. PC客⼾端开发:⼀般是开发Windows上的桌⾯软件,⽐如WPS之类的,技术栈的话⼀般是C++和QT,QT 是一个跨平台的 C++图形用户界面(Graphical User Interface,GUI)开发框架。
  4. 服务端开发:各种⼤型应⽤⽹络连接的⾼并发后台服务。这块Java也⽐较多,C++主要⽤于⼀些对性能要求⽐较⾼的地⽅。如:游戏服务、流媒体服务、量化⾼频交易服务等
  5. 游戏引擎开发:很多游戏引擎就都是使⽤C++开发的,游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习UE4、Cocos2d-x等开源引擎实现
  6. 嵌⼊式开发:嵌⼊式把具有计算能⼒的主控板嵌⼊到机器装置或者电⼦装置的内部,通过软件能够控制这些装置。⽐如:智能⼿环、摄像头、扫地机器⼈、智能⾳响、⻔禁系统、⻋载系统等等,粗略⼀点,嵌⼊式开发主要分为嵌⼊式应⽤和嵌⼊式驱动开发。
  7. 机器学习引擎:机器学习底层的很多算法都是⽤C++实现的,上层⽤python封装起来。如果你只想准备数据训练模型,那么学会Python基本上就够了,如果你想做机器学习系统的开发,那么需要学会C++。
  8. 测试开发/测试:每个公司研发团队,有研发就有测试,测试主要分为测试开发和功能测试,测试开发⼀般是使⽤⼀些测试⼯具(selenium、Jmeter等),设计测试⽤例,然后写⼀些脚本进⾏⾃动化测试,性能测试等,有些还需要⾃⾏开发⼀些测试⽤具。功能测试主要是根据产品的功能,设计测试⽤例,然后⼿动的⽅式进⾏测试。
在这里插入图片描述

📝全文总结

本文系统梳理了C++的发展脉络与应用价值:

  • 🚀 发展简史:从1979年“C with Classes”起步,到1998年首个国际标准C++98诞生,再到里程碑式的C++11引入现代特性,C++完成了从实验语言到工业标准的演进。
  • 📈 行业地位:常年稳居编程语言排行榜前五,证明了其在工业界不可替代的地位和持久需求。
  • 💼 广泛应用:在游戏开发、操作系统、嵌入式系统、音视频处理、金融服务等对性能要求极高的领域都是核心选择。
  • 🎯 学习路径:建议以C++98和C++11为起点,打好面向对象、模板、STL等基础后,再循序渐进学习后续版本新特性。

C++虽有一定学习曲线,但其带来的系统级编程能力和性能优化理解,将成为开发者宝贵的技术资产。

今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!

在这里插入图片描述

Read more

C++_STL之list篇

C++_STL之list篇

一、list的介绍   std::list是C++标准模板库(STL)中的一个双向链表容器。与vector和deque不同,list不支持随机访问,但它在任何位置插入和删除元素都非常高效。 1.基本特性 (1)双向链表结构:每个元素都包含指向前驱和后继的指针 (2)非连续存储:元素分散存储在内存中,通过指针连接 (3)时间复杂度:         任意位置插入/删除:O(1)         随机访问:O(n)         遍历:O(n) 二、list常用操作         我这里就通过调试来带大家看一下每个函数的效果。 1.创建和构造         列举了一些list构造时的基础用法. #include <iostream> #include <list> using namespace std; int main(

By Ne0inhk
2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲:  1、握手问题-(解析)-简单组合问题(别人叫她 鸽巢定理)😇,感觉叫高级了  2、小球反弹-(解析)-简单物理问题,不太容易想  3、好数-(解析)-简单运用分支计算  4、R 格式-(解析)-高精度,不是快速幂😉  5、宝石组合-(解析)-lcm推论(gcd、lcm结合)  6、数字接龙-(解析)-DFS(蓝桥专属、每年必有一道)  7、拔河-(解析)-定一端,动一端😎 题目: 1、握手问题 问题描述

By Ne0inhk
求最大公约数(gcd)与最小公倍数(lcm)【C/C++】

求最大公约数(gcd)与最小公倍数(lcm)【C/C++】

大家好啊,欢迎来到本博客( •̀ ω •́ )✧,我将带领大家详细的了解最大公约数的思想与解法。 一、什么是公约数 公约数,也称为公因数,是指两个或多个整数共有的因数。具体来说,如果一个整数能被两个或多个整数整除,那么这个整数就是这些整数的公约数。 例如,考虑整数12和18: * 12的因数有 :1, 2, 3, 4, 6, 12 * 18的因数有:1, 2, 3, 6, 9, 18 12和18的公约数是它们共有的因数,即:1, 2, 3, 6 附:lcm是最小公倍数 定理:a、b 两个数的最小公倍数(lcm)乘以它们的最大公约数(gcd)等于 a 和 b 本身的乘积。 如:gcd(

By Ne0inhk

ONNX Runtime C++ 库

ONNX Runtime 为 C++ 提供了完整的推理 API,你可以通过集成它来在 C++ 项目中高效地运行 ONNX 模型。 一、如何获取 ONNX Runtime C++ 库 在你的 C++ 项目中使用 ONNX Runtime,主要有两种方式: * 使用预编译库(推荐):这是最简单的入门方式。你可以从 ONNX Runtime 官方网站的 Releases 页面下载适用于你平台(如 Windows、Linux、macOS)的 C/C++ 预编译库。这些库通常包含了核心的推理功能。 * 从源码编译:如果你有特殊需求,比如需要支持特定的硬件(如 GPU、OpenVINO、NNAPI),或希望定制库的大小(例如为移动端进行精简)

By Ne0inhk