优秀!19年后,它再次成为TIOBE年度编程语言
新年伊始,TIOBE发布了2022年度编程语言,C++时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C++便成为年度编程语言。2022年,C++获得了最高的人气+4.62%,紧随其后的是 C (+3.82%) 和 Python (+2.78%)。
在最近的20年里,编程语言风云变幻,但C++的变现非常稳定,份额始终名列前五,C++作为一种高级面向对象语言,可以开发快速而庞大的软件系统,且性能极其出色,使得其经常成为开发者的首要选择。
这款将近40岁的编程语言,为何能如此坚挺,且再次崛起呢?
1970年,贝尔实验室研究员丹尼斯·里奇和肯·汤普森闲来无事,因为都喜欢玩一款Space Travel的电子游戏,一拍即合,决定自己开发,于是开始合作编写UNIX系统,并且顺手改进了一下B语言,两年后,它被正式命名为C语言。
歪打正着,C语言作为UNIX的“副产品”,迅速成为应用最广泛的系统程序设计语言。但C语言也存在一些缺陷,类型检查机制相对较弱、缺少支持代码重用的语言结构,造成用C语言开发大型应用程序比较困难。
1979年,丹麦计算机科学家本贾尼·斯特劳斯特卢开始改进C语言,以C语言为基础,借鉴了Simula的思想,增加了数据封装、继承、多态等面向对象的编程特性,又增加了模板等面向泛型编程的特性,提高了开发效率,加强了对大中型软件的适用性。
在1983年,C++正式发布,并在当年通过了ANSI标准化,从而成为一种正式的编程语言。随后,C++不断发展,向后发布了C++98、C++03、C++11、C++14、C++17、C++20。
C++在编程语言领域一直保持活跃,一个很重要的原因是它的“学习能力”,不断地吸收和引入其他编程语言的优秀特性来完善自己,不断发布各种特性的新语言标准。
比如最新发布C++20标准,提供了模板元编程、类型推导、范围for语句、运算符重载等许多新特性,参考了Rust的安全特性和Swift的简洁语法,提供了更为强大和现代化的功能。C++ 社区也不断推出新的编译器和工具,如 Clang/LLVM 与 GCC, 这使得C++能够更好的支持新的架构和平台。
C++作为一种面向对象的编程语言,有很多优点,拥有面向对象编程、泛型编程和模板编程等强大特性,能够支持高性能计算和嵌入式系统开发,并支持跨平台开发。与Java、Python等语言相比,C++是运行在离操作系统最近的一种高级语言,可以直面系统底层API,SDK,跟C兼容,因此它的执行效率非常高。
它的缺点在于学习曲线较高,对于新手来说可能会有些棘手,特别是在内存管理方面,有时会引发难以调试的问题, C++的错误也可能很难排查。另外, C++在代码可读性和可维护性方面还有待提升,但这也取决于开发者的风格和编码规范。
C++为开发者提供了非常丰富和灵活的特性和工具,能够适应各种应用场景和需求。例如游戏引擎领域,很多主流游戏引擎,如Unreal Engine、CryEngine和id Tech等,都是用C++开发的。这些引擎能够为游戏开发者提供丰富的功能和工具,并在游戏性能方面表现优异。
操作系统领域,很多操作系统的核心部分,如Windows、Linux和macOS等,都是用C++开发的。这些操作系统能够提供稳定和高效的运行环境,并能够支持各种应用程序。
软件工具领域,很多成功的软件工具,如Adobe Photoshop、AutoCAD和Microsoft Visual Studio等,还有我们熟悉的QQ、各种杀毒软件、股票软件、浏览器都是用C++开发的。这些工具能够提供丰富和强大的功能,并能够满足各种专业领域的需求。
还有高性能计算和嵌入式系统,很多科学和工程领域的应用程序,如气象模拟、结构分析和分子动力学等,都是用C++开发的。这些程序能够提供高效和准确的计算能力,并能够处理大量复杂的数据。C++在嵌入式系统领域中也得到广泛应用,如智能家居、工业控制、智能交通系统等。
马上迎来40岁的C++,在编程届的地位仍然举足轻重。尽管随着其他语言的出现和发展,它的地位可能会受到挑战,但是它的高效性和灵活性使得它仍然有着很强的竞争力。在未来,C++可能会越来越重
相关文章:

优秀!19年后,它再次成为TIOBE年度编程语言
新年伊始,TIOBE发布了2022年度编程语言,C时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C便成为年度编程语言。2022年,C获得了最高的人气4.62%,紧随其后的是…...

剑指 Offer 26. 树的子结构
摘要 剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),B是A的子结构, 即 A中有出现和B相同的结构和节点值。 一、子树解析 思路解析:若树B是树A的子结构,则…...

他是00年的,我们卷不过他...
现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...
C#开发的OpenRA的OpenGL创建纹理流程
C#开发的OpenRA的OpenGL创建纹理流程 由于OpenRA采用的是OpenGL来显示游戏画面, 那么它就必然采用纹理来显示了。 并且由于它是2D的游戏,所以3D的模型是没有的,只要使用纹理贴图,就可以完全实现了游戏的功能。 OpenGL的纹理要起作用,需要经过一系列的动作。 先要使用glGen…...
3D目标检测(一)—— 基于Point-Based方法的PointNet系列
3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 目录 3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 前言 零、网络使用算法 …...
《设计模式》策略模式
策略模式 前言 先了解一下设计模式的几种类似: 行为型设计模式(Behavioral Design Pattern)是指一组设计模式,它们关注的是对象之间的通信和协作。行为型设计模式描述了对象之间的职责分配和算法的封装,以及如何在运…...

【离散数学】1. 数理逻辑
1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学:研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑:研究推理的科学 数学方法:引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学,即使用符号化…...

Java8新特性学习
Java8新特性学习为啥使用Lambda表达式Lambda表达式的基础语法无参无返回有参无返回一个参数多参单个语句体类型推断四大内置核心函数式接口其他接口方法引用与构造器引用Stream简介什么是StreamStream操作步骤创建Stream中间操作终止操作(终端操作)归约与收集并行流…...
SPARK outputDeterministicLevel的作用--任务全部重试或者部分重试
背景 目前spark的repartition()方法是随机分配数据到下游,这会导致一个问题,有时候如果我们用repartition方法的时候,如果任务发生了重试,就有可能导致任务的数据不准确,那这个时候改怎么解决这个问题呢? …...

图数据库中的 OLTP 与 OLAP 融合实践
在一些图计算的场景下,我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路,希望给你带来一点启发。 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的图系统,经过反复测试无误后已…...

Shader Graph简介
使用着色器(shader)和材质(material),我们能够创造出非常多有趣的效果。除了Unity自带的shader外,还可以自己编写shader或使用其他人所编写的shader。编写shader通常需要我们了解shader编程语言的语法和相关…...

kubectl
目录 一、陈述式资源管理方法 二、基本信息查看 2.1 基本信息查看格式 2.2 查看master节点组件状态 2.3 查看命名空间 2.4 创建/查看命名空间 2.5 删除(重启)命名空间/pod 2.6 查看资源的详细信息 2.7 创建副本控制器来启动Pod 2.8 查看指定命…...

实验室设计SICOLAB第三方检测中心实验室设计
第三方检测中心实验室怎么设计?详细设计内容有哪些?功能区域有哪些?仪器有哪些?要多少面积?第三方检测中心实验室是一种独立的实验室,为客户提供各种测试和分析服务。以下是一个第三方检测中心实验室的详细…...
GPS经纬度转距离
function [pN, pE] distance_gps(lon1, lon2, lat1, lat2)d2r pi/180; % deg转radR 6371000.0; % 地球半径pN (lat2 - lat1) * d2r * R;pE (lon2 - lon1) * d2r * R * cos(lat2 * d2r); end...
7-周赛333总结
7-周赛333总结 还是只过了前两题,第三题又写了好久好久,然后也不知道错在了哪里,只过了部分题解,也许是思考不全面吧。下次也许先做第四题更好…第四题今天花了点时间 做出来了个大概 开心 :happy: 合并两个二维数组 - 求和法【…...
电子招标采购系统源码—互联网+招标采购
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明,可…...
SQL注入和XSS攻击
1、SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输…...
js Map的使用
前言:Map数据集可以理解为加强版的对象 一、for...of 1、对象不能用于for of,因其没有部署Iterator接口;其他数据集如:数组、Map、Set、Iterator对象等都可以用for...of2、使用for...of的优势: for of的循环体中可以…...
企业应该怎么管理香港服务器?
做好服务器管理,往往能为站长避免很多麻烦。用户租用服务器,除了希望它快速而安全,还有就是如何才能得到优质及时的售后和指导建议了。服务器供应商只提供服务器管理的基础服务,负责提供硬件、带宽和电力等服务,服务器…...

软件设计(十四)-UML建模(上)
软件设计(十三)-原码、反码、补码、移码https://blog.csdn.net/ke1ying/article/details/129115844?spm1001.2014.3001.5501 UML建模包含:用例图,类图与对象图,顺序图,活动图,状态图ÿ…...

408第一季 - 数据结构 - 线性表
只能用C/C! 顺序表 闲聊 线性表的逻辑顺序和物理顺序相同 都是1234 顺序表的优点: 随机访问,随机访问的意思是访问的时间 和位置没有关系,访问下标1和100一样的,更深层就是直接计算 a100 * 数组大小,随便…...
Unity——QFramework框架 内置工具
QFramework 除了提供了一套架构之外,QFramework 还提供了可以脱离架构使用的工具 TypeEventSystem、EasyEvent、BindableProperty、IOCContainer。 这些工具并不是有意提供,而是 QFramework 的架构在设计之初是通过这几个工具组合使用而成的。 内置工具…...

Linux 文件系统与 I/O 编程核心原理及实践笔记
文章目录 一、理解文件1.1 狭义理解1.2 广义理解1.3 文件操作的归类认识1.4 系统角度:进程与文件的交互1.5 实践示例 二、回顾 C 文件接口2.1 hello.c 打开文件2.2 hello.c 写文件2.3 hello.c 读文件2.4 输出信息到显示器的几种方法2.5 stdin & stdout & st…...
【Go语言基础【5】】Go module概述:项目与依赖管理
文章目录 一、Go Module 概述二、Go Module 核心特性1. 项目结构2. 依赖查找机制 三、如何启用 Go Module四、创建 Go Module 项目五、Go Module 关键命令 一、Go Module 概述 Go Module 是 Go 1.11 版本(2018 年 8 月)引入的依赖管理系统,用…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面
在开发鸿蒙应用时,你是否也曾为一个页面的布局反复调整?是否还在为查 API、写模板代码而浪费大量时间?今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie(代码精灵) ,如何从 0 到 1 快速构建一个…...

探索未知惊喜,盲盒抽卡机小程序系统开发新启航
在消费市场不断追求新鲜感与惊喜体验的当下,盲盒抽卡机以其独特的魅力,迅速成为众多消费者热衷的娱乐与消费方式。我们紧跟这一潮流趋势,专注于盲盒抽卡机小程序系统的开发,致力于为商家和用户打造一个充满趣味与惊喜的数字化平台…...

Profinet 协议 IO-Link 主站网关(三格电子)
一、产品概述 1.1 产品用途 SG-PN-IOL-8A-001 网关是 Profinet 从转 IO-Link 主的网关设备 ,可以将 IO-Link 从站设备接入 Profinet 系统,通过该网关可实现传感器及驱动器与控制 器之间的信息交互。网关有两个百兆网口和 8 个 IO-Link 端口,两…...
11.MySQL事务管理详解
MySQL事务管理详解 文章目录 MySQL事务管理 事务的概念 事务的版本支持 事务的提交方式 事务的相关演示 事务的隔离级别 查看与设置隔离级别 读未提交(Read Uncommitted) 读提交(Read Committed) 可重复读(Repeatabl…...

《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》
目录 一、踏上Python之旅二、Python输入与输出三、变量与基本数据类型四、运算符五、流程控制 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print() 在Python中想要在屏幕中输出内容,应该使用print()函数…...
Zookeeper 和 Kafka 版本与 JDK 要求
Apache Zookeeper 和 Apache Kafka 在不同版本中对 JDK 的要求如下表所示(基于官方文档和历史版本记录整理): 1. Zookeeper 版本与 JDK 要求 Zookeeper 版本要求的最低 JDK 版本说明3.4.x 系列JDK 6生产环境建议用 JDK 8(旧版兼容性强)。3.5.x 系列(3.5.5+)JDK 83.5.0 …...