当前位置: 首页 > news >正文

C++基本介绍

在这里插入图片描述

文章目录

  • 🥭1.C++基本介绍
    • 🧂1.1 C++是什么
    • 🧂1.2 C++发展史
  • 🍒2. C++的优势
    • 🥔2.1 语言的使用广泛度
    • 🥔2.2 C++的应用领域
  • 🫒3. C++学习计划

🥭1.C++基本介绍

🧂1.1 C++是什么

C++是一种通用的、高级的编程语言,它是C语言的扩展和改进版本。C++由Bjarne Stroustrup博士在20世纪80年代初开发,旨在为程序员提供更多的功能和工具,以便更轻松地编写复杂的软件程序。

拜一拜祖师爷,保佑在学习C++的路上少写bug

image-20230522142150548

C++支持面向对象编程。面向对象编程是一种编程范式,通过将数据和操作封装在对象中,可以更好地组织和管理代码。这使得C++能够创建模块化、可重用和易于维护的程序。

此外,C++还提供了许多其他功能和特性,如模板、异常处理、多态等。这些功能使得C++成为一门功能强大且灵活的编程语言,被广泛应用于各个领域。

C++与C语言是有一定的渊源的,但是C#的C++并没有很大关系。C#是早期微软为了对标Java而问世的一款编程语言。

C++是在C语言的基础上补充拓展出来的,就好比是一个妈生的亲兄弟(姐妹)。而Java“借鉴”了C++的一些特性,然后在此基础上做出一些改变,自立门户,C++和Java就好比是堂兄弟(姐妹)。C#又“借鉴”了Java一些特性和概念,然后又在此基础上做出一些改变Java和C#也是属于堂兄弟(姐妹)关系。

🧂1.2 C++发展史

C++的发展史可以追溯到1979年,贝尔实验室的本贾尼等人试图分析Unix内核的时候,试图将内核模块化,于是在C 语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。随着时间的推移,这种新的语言逐渐发展壮大,并在1983年正式被命名为C++。C++继承了C语言的基本语法和功能,并引入了面向对象编程的特性,如类、继承和多态性

C++历史版本:

版本发布年份内容
C++98/C++031998/2003最早的C++标准版本,包含了面向对象编程的基本特性、模板和STL(标准库)等功能。
C++11/C++0x2011引入了许多重要的特性,如自动类型推断、Lambda表达式、并发编程支持、右值引用和移动语义等,以及对模板和标准库的改进。
C++142014对C++11进行了一些修订和改进,增加了一些新特性和语法,如泛型lambda表达式、constexpr函数、二进制文字等。
C++172017引入了结构化绑定、折叠表达式、内联变量、并行算法库、文件系统库等新特性,以及对C++14的改进和修正。
C++202020引入了概念(Concepts)、模块(Modules)、协程(Coroutines)、三向比较运算符、范围for循环的初始化语句等重要特性,以及对C++17的改进和修正。
C++23 (预计)预计在2023年发布预计将引入一些新特性和改进,如常规化的元编程、设计模式支持、纤程(Fibers)等。

C++98定向之后,C++委员会就计划每隔5年更新一个大版本,03年正常更新了一次,如果按照计划,应该是在08年左右再更新一次。可是在05年的时候,C++委员会就发了公告,大概意思就是,可能搞不出大版本,只能小打小闹一下,然后就把这期间更新的叫C++0x。终于到了11年(时隔13年呐),新的标准终于更新了,也就是我们的C++11,这次的更新让不少人重新回到了C++,也一直沿用至今。但在这之后,一直没有很大的突破,当20年的时候,大家都很期待C++会有一个新的突破,可是会议结束之后,却未达到大家预期的效果。

image-20230522215652336

目前C++23还在定制中,这从侧面也能看出来C++还是有一定的局限性的。

Java相比C++,有一个“氪金”的公司(Oracle),大概每半年就更新一次,这样的好处就是Java后期的生态可能会比C++好一点,但是这也对学习Java的人来说,是一个头疼的问题,因为更新太快了,可能学着学着,版本就换了。

image-20230522215950390

C++现在虽然还是在发展,但是市面上主流使用的还是C++98和C++11,这些也够我们掉头发了,所以我们也不必担心,能把现有的玩明白,就很厉害啦。

由于C++是从C语言里面生长出来的,所以C++是兼容C语言的。

🍒2. C++的优势

🥔2.1 语言的使用广泛度

image-20230522212924704

从排行榜可以看出来,C++依然是属于大头,对于学习C++来说还是有很大的优势。

  1. C++兼容C,学一门等于学两门,不亏;
  2. C++让你成为“黑客”,C++给予了程序员极大的控制力,允许直接操作内存和底层资源。在合法和道德的前提下,C++让你成为一个技术高手,能够创造出令人瞩目的产品(如:Linux操作系统、英雄联盟、浏览器、PS…哪些知名的软件是c++写的?)。
  3. C++学习十分有成就感!

虽然这些都不是很着调,但我们在学习之前,肯定要给自己打气,“工欲善其事必先稳心态”(原句:工欲善其事,必先利其器),人家“王婆婆”卖瓜之前还得先夸夸自己的瓜呢,更何况C++确实是个“好东西”。

C++具体的优势和特性,还得在今后的学习中,慢慢领悟。

🥔2.2 C++的应用领域

  1. 游戏开发:著名的游戏引擎Unity3D使用C++作为其核心引擎的开发语言。另外,著名的游戏《英雄联盟》和《CS》也是使用C++进行开发的。
  2. 嵌入式系统:无人机制造商DJI的飞控系统是用C++编写的。汽车电子领域中,自动驾驶系统和车载娱乐系统通常也使用C++进行开发。
  3. 科学计算和数值分析:开源库Eigen是一个用于线性代数计算的C++库,被广泛用于科学计算和数值分析任务。另外,CERN的粒子物理研究中使用的ROOT数据分析框架也是用C++编写的。
  4. 金融和高频交易:高频交易公司使用C++来开发快速而高效的交易系统。例如,金融公司Jane Street就是使用C++作为其主要交易系统的开发语言之一。
  5. 图形界面和桌面应用:跨平台的应用开发框架Qt是用C++编写的。许多知名的软件,如Adobe Photoshop、Autodesk Maya和Microsoft Office套件,也使用C++进行桌面应用程序的开发。
  6. 数据库系统:开源关系型数据库管理系统MySQL使用C++编写。另外,PostgreSQL、Oracle数据库等也在其代码中使用了C++。

🫒3. C++学习计划

网上常听闻C++是最难学的语言之一,这是属实的。《程序员》期刊2010年8期C++强大背后里面有提到:

C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次:

  • 第一层次,C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stroustrup撰写的经典《C++程序设计语言》或他一年半前的新作《C++程序设计原理与实践》,而一般C++课程也止于此,另外《C++ 标准程序库》及《The C++ Standard Library Extensions》可供参考;
  • 第二层次,正确高效地使用C++:此层次开始必须自修,阅读过《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++编程规范》等,才适宜踏入专业C++开发之路;
  • 第三层次,深入了解C++:关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;
  • 第四层次,研究C++:阅读《C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。

就本人现阶段而言,要是能学到第二层次,就已经很不错了。

现在市面上有很多公开的课程,找到适合自己口味的,跟着这些免费课程入门,在这期间加上一定的练习,多多总结,积极学习、消极学习、持续学习。不可操之过急,C++这门语言肯定是需要一定的积累的,不能被网上的“21天”系列迷惑。在有一定基础之后,可以看一些技术书籍,进一步提升自己的水平。

这篇文章是前辈左耳朵耗子——陈皓写的“21天教你学会C++”,来讨论当下的大环境及自己的经验。

可惜的是前辈本月13号晚“离开”了我们,博主几个月前还听老师谈起了这位前辈,跑去前辈的技术论坛学习。

希望前辈路走好!也希望朋友们注意身体,平安健康。

本期就分享到这里,我们下期再见,如果还有下期的话。

相关文章:

C++基本介绍

文章目录 🥭1.C基本介绍🧂1.1 C是什么🧂1.2 C发展史 🍒2. C的优势🥔2.1 语言的使用广泛度🥔2.2 C的应用领域 🫒3. C学习计划 🥭1.C基本介绍 🧂1.1 C是什么 C是一种通用…...

如何理解工业互联网与智能制造,怎么共建智慧工厂?

第六届数字中国建设峰会26日在福州开幕,在这个数字化新技术的变革风口,企业如何把握机遇,借工业互联网和智能制造实现智慧工厂建设? 探讨三个问题: 什么是工业互联网、智能制造、智慧工厂;它们三者之间的…...

主机访问不到虚拟机(centos7)web服务的解决办法

目录 一、背景 二、解决办法 2.1、配置虚拟机防火墙 2.2、修改虚拟机网络编辑器 一、背景 主机可以访问外网,虚拟机使用命令:curl http://网址,可以访问到web服务 ,主机使用http://网址,访问不到虚拟机&#xff08…...

第四章 ActiveMQ与SpringBoot集成——ActiveMQ笔记(动力节点)

第四章 ActiveMQ 与 SpringBoot 集成 4-1 ActiveMQ 与 SpringBoot 集成集成配置 1、加载 spring boot 的 activeMQ 的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </de…...

Halcon 算子 select_shape_std 和 select_shape_xld区别

文章目录 1 select_shape_std 算子介绍2 select_shape_xld算子介绍3 select_shape_std 和 select_shape_xld区别4 Halcon 算子的特征 Features 列表介绍1 select_shape_std 算子介绍 select_shape_std (Operator) Name select_shape_std — Select regions of a given shape.Si…...

【Java基础】匿名内部类

&#x1f38a;专栏【Java基础】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The truth that you leave】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f381;什么是匿名内部类 &#x…...

基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器

基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器 0. 前言1. DHT11驱动原理2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 开发环境&#xff1a;ESP-IDF 4.3 操作系统&#xff1a;Windows10 专业版 开发板&#xff1a;自制的ESP32-WROOM-32E 准备一个DHT11温湿度传…...

C++——模板初阶

文章目录 一.泛型编程二.函数模板1.函数模板的概念2.函数模板的格式3.函数模板的原理4.函数模板的实例化&#xff08;1&#xff09;隐式实例化&#xff08;2&#xff09;显式实例化 5.模板参数的匹配原 三.类模板1.类模板的定义格式2.类模板的实例化 前言&#xff1a; 本章我们…...

【TOOLS: Linux与windows及linux与linux之间文件传输常用方法及命令】

文章目录 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法1.1.2 SCP 文件传输方法1.1.3 FTP 文件传输方法 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法 1&#xff09;设置 virtualbox 中的共享文件夹&#xff0c;用户可以在windows某个盘下创建自己的共享文件…...

【博览群书】《实战大数据》——属于我的第一本大数据图书

文章目录 前言简介目录其他 前言 Hello家人们&#xff0c;博主前不久参加了CSDN图书馆和机械工业出版社联合举办的图书类活动&#xff0c;很荣幸在活动中获得了属于自己的第一本大数据图书&#xff0c;《实战大数据—— 分布式大数据分析处理系统开发与应用》。作为大数据专业…...

【计算机组成原理】实验二

文章目录 实验二 运算器实验一、实验目的二、实验原理三、运算器功能编码四、实验内容任务一 算术运算任务二 逻辑运算任务三 移位运算 实验二 运算器实验 一、实验目的 完成算术、逻辑、移位运算实验&#xff0c;熟悉ALU运算类型的控制位运用。实验仪器&#xff1a;JTHS-A …...

hive数据库hql基础操作02

1.内部表和外部表 默认情况下创建的表就是内部表&#xff0c;Hive拥有该表的结构和文件。换句话说&#xff0c;Hive完全管理表&#xff08;元数据和数据&#xff09;的生命周期&#xff0c;类似于RDBMS中的表。当你删除内部表时&#xff0c;它会删除数据以及表的元数据。可以使…...

门电路OD门

漏极开路输出的门电路&#xff08;OD门&#xff09; 为了满足输出电平的变换&#xff0c;输出大负载电流&#xff0c;以及实现“线与”功能&#xff0c;将CMOS门电路的输出级做成漏极开路的形式&#xff0c;称为漏极开路输出的门电路&#xff0c;简称OD&#xff08;Open&#x…...

没有域名,一个服务器Nginx怎么部署多个前端项目

因为没有域名&#xff0c;所以用路径来作区分&#xff0c; 主项目&#xff1a;直接根路由访问该项目&#xff0c;与正常配置无任何差别从项目&#xff1a;此处设置/new路径&#xff0c;为从项目&#xff0c;所有从项目访问路径均要加上/new ①修改Nginx配置文件 Nginx 配置文…...

城市内涝的原因和解决措施,内涝监测预警助力城市防涝度汛

城市内涝是城市化进程中最遇到的自然灾害&#xff0c;城市内涝不仅会对市民生活造成困扰&#xff0c;也会对城市基础设施和经济发展产生不利影响。因此&#xff0c;及时监测城市内涝现象&#xff0c;对于城市管理和城市安全具有重要意义。本文将深入探讨城市内涝的原因以及针对…...

8年测试总结,性能测试问题大全,这些问题你应该认清的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 响应时间VS吞吐量…...

RabbitMQ集群安装

RabbitMQ集群安装 1.前言 OS: CentOS Linux release 7.9.2009 (Core) 机器: IPnodecpu内存存储10.106.1.241max-rabbitmg-018 核16 G100 G10.106.1.242max-rabbitmg-028 核16 G100 G10.106.1.243max-rabbitmg-038 核16 G100 G 因为操作系统版本是 centos7&#xff0c;所以…...

面试:link和@import的区别

1&#xff1a;link是XHTML标签&#xff0c;除了加载CSS外&#xff0c;还可以加载RSS&#xff1b;import只能加载CSS 2:link引入CSS时&#xff0c;在页面载入时同时加载&#xff1b;import需要页面完全载入后加载&#xff0c;可能会出行闪屏 3:link是XHTML标签&#xff0c;无兼容…...

图片隐写(一)

文件隐藏 binwalk binwalk -e filename foremost foremost filename steghide & stegseek Install sudo apt-get install steghidestegseek Use steghide extract -sf filename -p passwordtime stegseek secret.file aaa.txt dd 文本隐藏 二进制文件末尾 or 文…...

Vivado 下 IP核 之ROM 读写

目录 Vivado 下 IP核 之ROM 读写 1、实验简介 2、ROM IP 核简介 3、ROM IP 核配置 3.1、创建 ROM 初始化文件 3.2、单端口 ROM 的配置 3.3、双端口 ROM 的配置 3.4、ROM IP 核的调用 &#xff08;1&#xff09;ROM 顶层模块代码 &#xff08;2&#xff09;ROM IP 核仿…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

【R语言编程——数据调用】

这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中&#xff0c;有多个库支持调用内置数据集或外部数据&#xff0c;包括studentdata等教学或示例数据集。以下是常见的库和方法&#xff1a; 可用库及数据集 openintro库 该库包含多个教学数据集&a…...

MySQL 数据库深度剖析:事务、SQL 优化、索引与 Buffer Pool

在当今数据驱动的时代&#xff0c;数据库作为数据存储与管理的核心&#xff0c;其性能与可靠性至关重要。MySQL 作为一款广泛使用的开源数据库&#xff0c;在众多应用场景中发挥着关键作用。在这篇博客中&#xff0c;我将围绕 MySQL 数据库的核心知识展开&#xff0c;涵盖事务及…...

React与原生事件:核心差异与性能对比解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...