【C++】—— 初识C++

【C++】—— 初识C++

  • 一、什么是 C++
  • 二、C++ 的发展历史
  • 三、C++ 版本更新
  • 四、C++ 的重要性
  • 五、C++ 在工作领域中的运用
  • 六、C++ 书籍推荐:

一、什么是 C++

  C语言 是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言 则不合适。为了解决软件危机, 20 世纪 80 年代, 计算机界提出了 OOP(objectoriented programming:面向对象) 思想,支持面向对象的程序设计语言应运而生.
 1982年,Bjarne Stroustrup 博士 在 C语言 的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与 C语言 的渊源关系,命名为 C++。因此:C++ 是基于 C语言 而产生的,它既可以进行 C语言 的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

二、C++ 的发展历史

  C++ 的起源可以追溯到 1979 年,当时 Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地⽅可能有差异) 在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系方面⽅⾯的不⾜。

  1983 年,Bjarne Stroustrup 在 C语言 的基础上添加了吗面向对象编程的特性,设计出了 C++ 语言的雏形,此时的 C++ 已经有了类、封装、继承等核心概念,为后来的⾯向对象编程奠定了基础。这⼀年该语言被正式命名为 C++。

  在随后的几年中,C++ 在学术界和⼯业界的应用逐渐增多。⼀些⼤学和研究所开始将C++作为教学和研究的⾸选语言,而⼀些公司也开始在产品开发中尝试使用 C++。这⼀时期,C++ 的标准库和模板等特性也得到了进⼀步的完善和发展。

  C++ 的标准化工作于 1989 年开始,并成立了⼀个 ANSI 和 ISO (International Standards Organization)国际标准化组织的联合标准化委员会。1994 年标准化委员会提出了第⼀个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。

  在完成 C++ 标准化的第⼀个草案后不久,STL(Standard Template Library)是惠普实验室开发的⼀系列软件的统称。它是由 Alexander Stepanov、Meng Lee 和 David R Musser 在惠普实验室⼯作时所开发出来的。在通过了标准化第⼀个草案之后,联合标准化委员会投票并通过了将 STL 包含到 C++ 标准中的提议。STL 对 C++ 的扩展超出 C++ 的最初定义范围。虽然在标准中增加 STL 是个很重要的决定,但也因此延缓了 C++ 标准化的进程。

  1997年11⽉14⽇,联合标准化委员会通过了该标准的最终草案。1998年,C++ 的 ANSI / IS0 标准被投⼊使⽤。
  
在这里插入图片描述

C++之父——本贾尼·斯特劳斯特卢普

  

三、C++ 版本更新

阶段内容
C with classes类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符重载等
C++1.0添加虚函数概念,函数和运算符重载,引用、常量等
C++2.0更加完善支持面向对象,新增保护成员、多重继承、对象的初始化、抽象类、静态成员以及const成员函数
C++3.0进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构的处理
C++98C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)
C++03C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性
C++05C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名C++0x,即:计划在本世纪第一个10年的某个时间发布
C++11增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循环、auto关键字、新容器、列表初始化、标准线程库等
C++14对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等
C++17在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器
C++20自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协程(Coroutines)、范围(Ranges)、概念(Constraints)等重大特性,还有对已有特性的更新:比如Lambda支持模板、范围for支持初始化等
C++23C++23是一个小版本的更新,进一步完善和改进现有特性,增加了 if consteval、falt_map、import std导入标准库等
C++26制定中

  

在这里插入图片描述

  现如今,大部分公司 C++ 所使用的版本是 98 和 11

  

四、C++ 的重要性

  截止至2024 年 6 月,C++ 在 TIOBE 编程语言社区一直稳居前三的位置。虽然语言排名并不能衡量一种语言的优劣,但是一门受众广的语言自然有良好的发展前景。

  TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和 Baidu(百度)统计出排名数据,只是反映某个编程语言的热门程度,并不能说明⼀门编程语言好不好,或者⼀门语言所编写的代码数量多少。
  
在这里插入图片描述

  

在这里插入图片描述

  

五、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++ 书籍推荐:

在这里插入图片描述

  • C++ Primer:主要讲解语法,经典的语法书籍,在学习 C++ 的前后中期都可以看,前期如果自学看可能会有点晦涩难懂,到中后期作为语法字典,非常用。
  • STL源码剖析:主要从底层实现的⻆度结合 STL 源码,庖丁解⽜式剖析 STL 的实现,是侯捷老的经典之作。可以很好的帮助我们学习别人用语法是如何实现出高效简洁的数据结构和算法代码,如何使用泛型封装等。让我们不再坐井观天,闭门造车,本书推荐 C++ 学习到中后期可以看。
  • Effctive C++:本书也是侯捷老师翻译的,本书有的⼀句评价,把 C++ 程序员分为看过此书的和没看过此书的。本书主要讲了 55 个如何正确高效使用 C++ 的条款,建议中后期可以看⼀遍,工作 1-2 年后再看⼀遍,相信会有不⼀样的收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799360.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【eNSP模拟实验】单臂路由实现VLAN间通信

实验需求 如下图所示,辅导员办公室需要访问处在不同vlan的学生管理服务器的文件,那么如何实现两台终端相互通信呢?我们可以使用单臂路由的方式来实现。 单臂路由(router-on-a-stick)是指在路由器的一个接口上通过配置…

小型医疗门诊挂号收费后台系统源码 医院管理系统后台thinkphp内核源码(带微信登录)

源码简介: 好用的小型医疗门诊后台管理系统的源码,就是那种医院管理用的,核心是用thinkphp做的。这个系统源码啊,功能多,用起来也方便。它还支持第三方配置和微信登录。 这玩意儿是基于ThinkPHP搞出来的医疗门诊系统…

AJAX知识点(详解)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Flowable-流程图标与流程演示

BPMN 2.0是业务流程建模符号2.0的缩写。它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识,BPMN 2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范,它能增进业务建模时的沟通效率。目前BPMN2.0是最新的…

持续集成01--Git版本管理及基础应用实践

前言 本系列文章旨在深入探讨持续集成/持续部署(Continuous Integration/Continuous Deployment, CI/CD)流程中的各个环节,而本篇将聚焦于Git版本管理及其基本应用。通过本文,读者将了解到Git的基本原理、安装配置、基本命令以及如…

高校动作捕捉与数字人开发实训室方案:助推高校开设虚拟数字人微专业

目前一些学校除了传统的实训室建设之外,部分院校会建设一些“微专业”,专业方向与AIGC以及虚拟数字人有关,通过引进一些虚拟数字人以及全身动作捕捉设备相关的产品和系统工具,进行设计课程方案,比如虚拟人直播&#xf…

Vue3学习体验(一)

搭建工程 使用vue-cli脚手架创建vue3工程 vue create vue3-app-vue-cliVue-cli官网:https://cli.vuejs.org/zh/guide/installation.html 使用vite搭建vue3工程 npm init表示临时的下载vite应用来创建vue3工程,工程名称为vue3-app-vite npm init vit…

银河麒麟高级服务器操作系统V10加固操作指南

1:检查系统openssh安全配置: 2:检查是否设置口令过期前警告天数: 3:检查账户认证失败次数限制: 修改/etc/pam.d/system-auth文件中deny的参数即可 4:检查是否配置SSH方式账户认证失败次数限制:

SAP DR创建借项凭证简介

DR创建借项凭证简介 创建借项凭证请求的详细步骤1. 进入创建销售订单的界面2. 选择销售凭证类型3. 输入销售组织数据4. 输入客户和参考数据5. 添加项目明细6. 检查和保存创建实际的借项凭证借项凭证后台配置定义凭证类型定义项目类别定义销售开票类型借项凭证请求的业务意义跟踪…

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

非对称加解密和签名

非对称加解密特点 一对密钥,公钥和私钥。私钥自己持有,公钥公开给通信的对方。 如果公钥用作加密,那么私钥用作解密。 如果私钥用做加密,那么公钥用作解密。 如果数据量少可用非对称加密算法直接加密。 如果数据量大,…

【双色转模拟调光磁吸灯应用方案】调光线性度好 调光频率1K以上都兼容 LED护眼教室黑板灯降压恒流驱动IC芯片FP7195

文章目录 前言 一、行业要求和痛点 1、设计空间小,双路调光调色不容易排布 2、磁场对调光的影响 二、FP7195如何解决这些要求和痛点 1、FP7195实际应用双色温调光电路框架 2、FP7195的转模拟调光技术 总结 前言 磁吸灯作为一种时尚、实用的家居装饰灯具,…

javaweb学习

javaweb就是实现浏览器和服务器之间的交互 1、服务器配置 Run->Edit Configurations,点击右上角的号,选择Tomcat Server的local: 选择server下的Configure...,在弹出的界面里点击有上角的号,选择自己解压的合适的t…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中,电压转换是一个常见的需求,尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路,它能够将220V的交流输入电压转换为稳定的5V直流输出,非常适…

java基础之变量,类型的转换,跟着哔站尚硅谷自学笔记。

变量 变量的介绍以及使用 1.变量的数据类型:基本数据类型:4类8种整数:byte short int long 浮点数:float double字符型:char布尔型:boolean引用数据类型:类 数组 接口 枚举 注解2.概述&#xf…

gptpdf:使用大模型(如 GPT-4o)将 PDF 解析为 markdown。

今天给大家分享一个开源的项目, 使用视觉大语言模型(如 GPT-4o)将 PDF 解析为 markdown。 方法非常简单(只有293行代码),但几乎可以完美地解析排版、数学公式、表格、图片、图表等。 使用 GeneralAgent lib 与 OpenAI API 交互。…

C++笔试强训4

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 %o就是输出八进制的无符号数,0123,,以0开头,本来就是八进制,所以输出为123,123是十进制,转化为八进制就是173. 故选…

双向带头循环链表

一、概念 何为双向:此链表每一个节点的指针域由两部分组成,一个指针指向下一个节点,另一个指针指向上一个节点,并且两头的节点也是如此,头节点的下一个节点是尾节点,尾节点的上一个节点是头节点&#xff1b…

C++ — 引用浅谈

引言 在C的语法规则中,定义了一种新的方法,叫做引用。在学习的初期,引用的作用很类似于指针(但需要注意引用不等于指针),引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名。 在上边…

Cesium--获取当前相机中心与地面的射线焦点

本文记录获取当前相机中心与地面的射线焦点的方法,可用于视角缩放过程中,控制视角自动平滑切换到二维等场景: 方法一定是视角中心能与地面有交集,如果对着地平线或对着天空肯定是没效果的。直接放代码: //调整相机到正…