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

news2024/11/15 8:07:40

【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.coloradmin.cn/o/1927282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、STM32F4+标准库+LWIP2.1.2移植+无操作系统

最快最简单的移植LWIP协议栈,可改可不改的东西统一不修改。后期学会了有能力了再回过头来修改,操作复杂理论复杂,同时讲解对新手不是很友好,故此此文档只讲操作无任何理论讲解。 零、所需文件及环境 1、第四章建立好的串…

51单片机11(蜂鸣器硬件设计和软件设计)

一、蜂鸣器硬件设计 1、 2、上面两张图,是针对不同产品的电路图。像左边这一块,是我们的A2,A3,A4的一个产品对应的一个封闭器的硬件电路。而右边的这一块是对应的A5到A7的一个硬件电路。因为A5到A7的一个产品,它的各…

排序算法3_冒泡排序、快速排序

一、冒泡排序 1.1 冒泡排序定义和思路 冒泡排序的基本思想是:通过相邻两个元素之间的比较和交换,使较大的元素逐渐从前面移向后面(升序),就像水底下的气泡一样逐渐向上冒泡,所以被称为“冒泡”排序。  在…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(二)

上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &…

王牌站士Ⅹ---人工智能中的数据隐私:PII 与个人信息

前言 今天,我将讨论如何区分美国和全球范围内不断涌现的数据隐私法所涵盖和不涵盖的数据类型。不同类型的数据受到更严格的保护,具体取决于司法管辖区,因此,如果您使用个人数据进行分析或机器学习,了解这一点很重要。…

痛心!不会用ChatGPT,差点错失一个亿

ChatGPT爆火这么久,今天我们也来聊聊GPT的玩法。等下,什么?你没听说过?没用过? 没听过没用过的朋友们,你们知道当我听到这回答的时候是多么痛心疾首吗? 为了让你们更直观的感受到,举个栗子,如果你用了GPT,就不需要抓耳挠腮的想方案了;如果你用了GPT,或许工作学习效…

MySQL 数据库 - 事务

MySQL 数据库(基础)- 事务 事务简介 事务 是一组操作集合,他是一个不可分割的工作单位,事务会把所有的操作看作是一个整体一起向系统发送请求,即这些操作要么同时成功,要么同时失败。 比如:张…

《Python数据科学之三:探索性数据分析与可视化》

《Python数据科学之三:探索性数据分析与可视化》 在数据科学项目中,探索性数据分析(EDA)和数据可视化是至关重要的步骤。它们帮助数据科学家理解数据的特征、发现数据中的模式和异常值,从而为后续的数据分析和机器学习…

python-29-零基础自学python-json、函数等存取用户数据+验证用户信息

学习内容:《python编程:从入门到实践》第二版 知识点: 如何验证用户、try-except-else处理异常 if判断、def方法及拆解方法 json引入、存储、读取 return none和return变量返回值很重要 answer 1 和answer “1”在使用后的区别 练习内容…

IDEA创建项目模块右边缺少Maven的解决

一、问题描述 我们在创建项目模块时,创建为Maven工程,创建后只是普通工程,idea右边缺少Mavenue标识管理 如图 二、问题的解决方法 在模块的pom.xml文件,点击选项,添加为Maven工程 如图 至此,创建maven工程…

2-34 小波神经网络采用传统 BP 算法

小波神经网络采用传统 BP 算法,存在收敛速度慢和易陷入局部极小值两个突出弱点。建立了基于遗传算法的小波神经网络股票预测模型 GA-WNN。该模型结合了遗传算法的全局优化搜索能力以及小波神经网络良好的时频局部特性。运用 MATLAB 对拟合和预测过程进行仿真。结果表…

COLING 2024 | AlphaFin:基于LLM的股票预测大模型,显著提高预测能力

COLING 2024 | AlphaFin:基于LLM的股票预测大模型,显著提高预测能力 发布于 2024-06-13 18:31:49 目前,机器学习和深度学习算法(ML&DL)已被广泛应用于股票趋势预测,并取得了显著进展。然而&#xff0c…

CSS在页面中使用的三种方式:行内样式、内嵌式样式表、链接式样式表

CSS样式如何在页面中使用,包含三种方式:行内样式、内嵌式样式表、链接式样式表。 CSS样式的使用系列博文: 《CSS在页面中使用的三种方式:行内样式、内嵌式样式表、链接式样式表》 《CSS选择器:基本选择器、复合选择器、…

Android TabLayout+ViewPager2如何优雅的实现联动详解

一、介绍 Android开发过程中,我们经常会遇到滑动导航栏的做法,之前的做法就是我们通过ViewGroup来转动,然后通过大量的自定义来完成,将导航栏item与viewpage 滑动,达到业务需求 二、现实方案 通过介绍,我…

Springboot 校园安全通事件报告小程序-计算机毕业设计源码02445

Springboot 校园安全通事件报告小程序系统 摘 要 随着中国经济的飞速增长,消费者的智能化水平不断提高,许多智能手机和相关的软件正在得到更多的关注和支持。其中,校园安全通事件报告小程序系统更是深得消费者的喜爱,它的出现极大…

揭秘|SSL证书年度费用:网络安全预算规划指南

在数字化时代,网络安全已成为企业不可或缺的一部分。对于任何在线业务而言,保护客户数据和维护网站安全至关重要。其中,SSL(Secure Sockets Layer)证书扮演着关键角色,它通过加密网站与用户之间的通信来确保…

[JS]Generator

介绍 Generator函数是 ES6 提供的一种异步编程解决方案, async是该方案的语法糖 核心语法 Generator对象由生成器函数返回, 并且它符合可迭代协议和迭代器协议 生成器函数在执行时能暂停, 后面又从暂停处继续执行 <script>// 1.定义生成器函数function* testGenerato…

前端实现一键复制功能

1、下载插件 npm i vue-clipboard32.0.0 2、在需要复制的文件中引入插件并使用&#xff1a; JS: import useClipboard from "vue-clipboard3"; const { toClipboard } useClipboard(); HTML: <el-tooltip content"复制内容" placement"top&…

继承和多态(上)

目录 继承 继承方式 切片&#xff08;切割&#xff09; 重定义&#xff08;隐藏&#xff09; 继承的6个默认成员函数 继承与友元&#xff0c;静态成员 菱形继承 菱形继承的冗余和二义性 继承和组合 继承 什么是继承&#xff1f; 是代码复用的一种手段。 语法&#xff…

生物科技食品公司企业网站模板带手机端:完整源代码包及搭建教程

系统概述 本模板设计秉承“科技引领健康&#xff0c;绿色塑造未来”的理念&#xff0c;融合生物科技的先进性与食品行业的健康属性&#xff0c;通过简洁大气的界面布局、清新自然的色彩搭配以及流畅的用户体验&#xff0c;展现企业的专业实力与品牌形象。无论是产品展示、企业…