【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 年后再看⼀遍,相信会有不⼀样的收获。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用嵌入式知识打造智能手环:nRF52蓝牙开发实战(C++/BLE/传感器)

项目概述 现代人越来越注重健康管理,智能穿戴设备应运而生。本项目旨在利用低功耗蓝牙芯片nRF52832,结合加速度计、心率传感器、陀螺仪等传感器,开发一款功能完善、性能稳定的智能运动手环。该手环能够实时采集用户的运动数据和生理指标&…

vue3 - vue项目自动检测更新

vue3 GitHub Demo 地址 vue3在线预览 vue2 GitHub Demo 地址 vue2 在线预览 web项目当页面检测到需要更新,然后弹框提示是否更新(刷新页面)这种可以通过纯前端实现也可以通过接口实现 接口实现:通过调用接口轮询和本地的版本号比…

护网HW面试——redis利用方式即复现

参考:https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。 未授权 原理: Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关…

FPGA设计之跨时钟域(CDC)设计篇(1)----亚稳态到底是什么?

1、什么是亚稳态? 在数字电路中,如果数据传输时不满足触发器FF的建立时间要求Tsu和保持时间要求Th,就可能产生亚稳态(Metastability),此时触发器的输出端(Q端)在有效时钟沿之后比较长的一段时间都会处于不确定的状态(在0和1之间振荡),而不是等于数据输入端(D端)的…

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信,距离 Windows 11 正式发布已过去整整三年时间,按理说现在怎么也得人均 Win 11 水平了吧? 然而事实却是,三年时间过去 Win 11 占有率仅仅突破到 29%,也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

功率继电器【HF46F】

目的:通过单片机控制继电器动作。 原理图如下,原理图中使用的继电器为HF46F5H, 上述原理图的电路原理: 在这个电路图中,电源开关相关的部分包括一个电源开关、一个三极管Q1、一个二极管D2和一个继电器K1。当电源开关…

阿里云ECS服务器安装jdk并运行jar包,访问成功详解

安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8.0-openjdk-devel 验证安装 安装完成后,验证 JDK 是否安装成功: java -version设置 JAVA_HOME 环境变量: 为了确保系统中的其他应用程序可以找到 JDK&…

开源必看!50 多个本地运行 LLM 的开源选项

在我之前的文章中,我讨论了使用本地托管的开源权重 LLM 的好处,例如数据隐私和成本节约。通过主要使用免费模型并偶尔切换到 GPT-4,我的月度开支从 20 美元降至 0.50 美元。设置端口转发到本地 LLM 服务器是移动访问的免费解决方案。 有许多…

WSL2 的安装与运行 Linux 系统

前言 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,允许开发人员在 Windows 系统上直接安装并使用 Linux 发行版。不用进行任何修改,也无需承担传统虚拟机或双启动设置的开销。 可以将 WSL 看作也是一个虚拟机,但是它更为便…

let/const/var的区别及理解

在JavaScript中,let、const 和 var 是用来声明变量的关键字,但它们之间在作用域、变量提升、重复声明等方面存在区别,详细情况如下: 1. let、const、var 的区别 (1) 块级作用域 let 和 const:具有块级作用域,由 {} 包…

记录些Redis题集(2)

Redis 的多路IO复用 多路I/O复用是一种同时监听多个文件描述符(如Socket)的状态变化,并能在某个文件描述符就绪时执行相应操作的技术。在Redis中,多路I/O复用技术主要用于处理客户端的连接请求和读写操作,以实现高并发…

Redis 中String类型操作命令(命令演示,时间复杂度,返回值,注意事项)

String 类型 文章目录 String 类型set 命令get 命令mset 命令mget 命令get 和 mget 的区别incr 命令incrby 命令decr 命令decrby 命令incrbyfloat 命令append 命令getrange 命令setrange 命令 字符串类型是 Redis 中最基础的数据类型,在讲解命令之前,我们…

STM32基础篇:EXTI × 事件 × EXTI标准库

EXTI EXTI简介 EXTI:译作外部中断/事件控制器,STM32的众多片上外设之一,能够检测外部输入信号的边沿变化并由此产生中断。 例如,在检测按键时,按键按下时会使电平产生翻转,因此可以使用EXTI来读取按下时…

用AirScript脚本给女/男朋友发送每日早安邮件(极简版本)

先看效果 工具 金山文档/WPS提供了每日定时的AirScript脚本服务,非常方便~ 话不多说,我们以金山文档为例,只有简单的五个步骤,非常容易~ 教程开始 步骤1 我们打开金山文档新建一个智能表格 步骤2 按下图…

基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现

1.绪论 1.1背景介绍 Python 的 Tkinter 库提供了创建用户界面的工具,可以用来构建股票评论数据及投资者情绪分析的图形用户界面(GUI)。通过该界面,用户可以输入股票评论数据,然后通过情感分析等技术对评论进行情绪分析…

【Linux网络】IP协议{初识/报头/分片/网段划分/子网掩码/私网公网IP/认识网络世界/路由表}

文章目录 1.入门了解2.认识报头3.认识网段4.路由跳转相关指令路由 该文诸多理解参考文章:好文! 1.入门了解 用户需求:将我的数据可靠的跨网络从A主机送到B主机 传输层TCP:由各种方法(流量控制/超时重传/滑动窗口/拥塞…

【JavaEE】网络编程——TCP

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 前言1.网络编程套接字1.1流式套接字(TCP)1.1.1特点1.1.2编码1.1.2.1ServerSo…

微信小游戏 彩色试管 倒水游戏 逻辑 (二)

最近开始研究微信小游戏,有兴趣的 可以关注一下 公众号, 记录一些心路历程和源代码。 定义一个 Water class 1. **定义接口和枚举**: - WaterInfo 接口定义了水的颜色、高度等信息。 - PourAction 枚举定义了水的倒动状态,…

【Nuxt3】vue3+tailwindcss+vuetify引入自定义字体样式

一、目的 在项目中引入自定义的字体样式(全局页面都可使用) 二、步骤 1、下载好字体 字体的后缀可以是ttf、otf、woff、eot或者svg(推荐前三种) 以抖音字体为例下载好放在静态文件夹(font)下 案例字…

数学建模入门

目录 文章目录 前言 一、数学建模是什么? 1、官方概念: 2、具体过程 3、适合哪一类人参加? 4、需要有哪些学科基础呢? 二、怎样准备数学建模(必备‘硬件’) 1.组队 2.资料搜索 3.常用算法总结 4.论文撰写的…