C++基础概念讲述

目录
  • 1.C++相关网站推荐
  • 2.C++和C的关系
  • 3.C++特性说明
    • 3.1与底层硬件紧密结合
    • 3.2对象生命周期的精确控制
    • 3.3Zero-Overhead Abstraction

首先,通过一张最新(2021.11)的编程语言排名图来了解常见的编程语言:

从图中可以看出,C++的排名相对于Python、Java、C来说并不突出,很大的原因是因为C++难度过大,也可以说是知识点太多,我们很难说能精通C++这门语言,只能说对它的部分了解,并能在工作中使用;

1.C++相关网站推荐

1、cppreference.com:这是一个C++最具权威的百科全书,但只有英文模式,相信大家可以看懂的;

2、Compiler Explorer (godbolt.org):在线代码编辑,可以直接生成汇编代码,可选择不同的编译器和版本,功能强大;

3、C++ Insights (cppinsights.io) :一个可以将C++代码及逆行翻译的网页,具体化代码高级功能;

2.C++和C的关系

简单来说,C++是C语言的扩展,主要有以下两方面;

首先关注性能方面,这是继承于C语言的特性:

  • 与底层硬件紧密结合
  • 对象生命周期的精确控制
  • Zero-overhead Abstraction

接着是扩展部分,引入大量特性,便于工程实践

三种编程范式:面向过程、面向对象、泛型
函数重载、异常处理、引用

最后,C++也是一系列不断演进的标准集合

  • C++98、C++11、C++14、C++17、C++20、C++23?
  • 语言本身的改进(例如Memory Model、Lambda Expressiomn)
  • 标准库的改进(auto_ptr、type_train/ranges)
  • C++标准的工业实现(MSVC、GCC、Clang)等编译器还存在差异;

3.C++特性说明

下面通过具体案例来说明上面列出的点

3.1与底层硬件紧密结合

打开网站: https://godbolt.org/z/xPq6e9

运行其中的案例可以发现,输出的数从大到小;

​ 其实在硬件底层,存放内存的地址分为大端法和小端法,而C++可以很好的适应不同硬件的存储方式,这样有助于提升性能,相比来说,JAVA就不考虑这些,导致数据存放到内存还需要再做一些处理,会增加一定的时间;

3.2对象生命周期的精确控制

​ 这里我们使用C++与C#做比较,对于C#而言,使用完一个对象并不用关注销毁,底层会自动进行销毁(垃圾回收机制);而C++从对象的创建、使用到销毁都需要使用者自己执行,不需要系统额外引用机制;这里有两个需要平衡的点,也就是易用和性能,这两者是有一定取舍的;

下面是C++和C#对于异常的处理方式:

造成这处理异常不同的原因就是生命周期精确控制引发的,Finally主要是用来显式销毁对象;

对生命周期的精准控制的好处:能够及时释放资源,并且不需要额外资源(线程)进行垃圾回收,提高了性能;

3.3Zero-Overhead Abstraction

主要包含以下两点:

不需要为没有使用的语言特性付出代价
例如虚函数,或者说在堆或栈构造对象,可以通过这个例子来理解:Compiler Explorer (godbolt.org)

使用一些语言特性不等于付出运行期成本
可以通过这个例子来理解:Compiler Explorer (godbolt.org)

我们调用函数并没有付出函数中的运行成本,这也是由于函数在编译期执行;

到此这篇关于C++基础概念讲述的文章就介绍到这了,更多相关C++基础概念内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++基础入门之运算符

    目录 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 总结 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

  • c/c++基础简单易懂的快速排序算法

    快速排序就是找一个基准,然后其左边要比他小,右边要比他大 int partition(int* a, int left, int right) { int pivot = left;//找最开始位置为基准 int index = left + 1; for (int i = index; i <= right; i++) { if (a[i] < a[pivot]) { swap(a, i, index); index++; } } swap(a, pivot, index - 1);//in

  • C++入门之模板基础讲解

    目录 前言 引入 模板 函数模板 模板的匹配原则 模板的显示调用 类模板 注意1 注意2 总结 前言 今天博主将要介绍的内容是–模板,他在C++中具有非常重要的位置.至于什么是模板呢?我们请看下面的章节. 引入 我们对交换函数Swap已经非常熟悉了,但是我们经常会遇到这样的一些事,比如,很多不同的数据类型进行交换,那么我们就需要写不同的重载Swap,如下: #include <iostream> using namespace std; void Swap(int& a,int&

  • 浅谈C++内存管理基础知识

    目录 概述 c++可用内存 c语言的可用内存 c++新增内存区域 new和malloc 智能指针引入 智能指针的实现 java延伸 java语言整体框架 java的垃圾回收机制 总结 概述 内存管理的原理庞大而复杂,然而这些都被操作系统进行了封装,并对外预留了API,这些api被c++调用,同时也被c++再次进行了封装,再面向程序员预留出了语法特性的接口,作为使用c++的程序员,我们只需要掌握c++预留的内存管理特性即可,就像我们开车不需要管变数箱.发动机是怎么变速.点火的,我们只需要掌握汽车给

  • C++基础概念讲述

    目录 1.C++相关网站推荐 2.C++和C的关系 3.C++特性说明 3.1与底层硬件紧密结合 3.2对象生命周期的精确控制 3.3Zero-Overhead Abstraction 首先,通过一张最新(2021.11)的编程语言排名图来了解常见的编程语言: 从图中可以看出,C++的排名相对于Python.Java.C来说并不突出,很大的原因是因为C++难度过大,也可以说是知识点太多,我们很难说能精通C++这门语言,只能说对它的部分了解,并能在工作中使用: 1.C++相关网站推荐 1.cppr

  • Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自己编写新的装饰器的更多高级语法. 什么是装饰器 装饰是为函数和类指定管理代码的一种方式.Python装饰器以两种形式呈现: [1]函数装饰器在函数定义的时候进行名称重绑定,提供一个逻辑层来管理函数和方法或随后对它们的调用. [2]类装饰器在类定义的时候进行名称重绑定,提供一个逻辑层来管理类,或管理随

  • Cocos2d-x 3.x入门教程(一):基础概念

    前言 接触游戏开发时间不长,之前一直都是写Lua,写Lua肯定是没有什么发展的啦,至少你要会写的.写客户端,肯定要看看Cocos2d-x了.从今天起,正式开始Cocos2d-X的学习之旅. 之前一直都是做C++开发的,转过来看Cocos2d-x,从语言上来说,没有多少问题.对于我来说,Cocos2d-x就是一个类库,就类似于MFC.ATL和QT一样,就是一个游戏类库,而我就按照学习类库使用的方法去学习Cocos2d-x.这篇文章叫基础概念,但是还是从整体来说说Cocos2d-x这个类库的. 基础

  • Java线程安全基础概念解析

    Java线程安全初步了解.JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果.从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他额外的同步控制就可以安全放心的使用对象. 1.线程安全的定义 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安

  • java语言注解基础概念详解

    1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃: 2.RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期: 3.RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在: 这3个生命周期分别对应于:Java源文件(.java文件)--->.class文件--->内存中的字节码.

  • MySQL系列之开篇 MySQL关系型数据库基础概念

    目录 一.基础概念 二.数据库管理技术的发展 三.关系型数据库(RDBMS)概念 四.RDBMS设计范式 一.基础概念 数据(Data)是描述事物的符号记录,是指利用物理符号记录下来的.可以鉴别的信息. 1.数据库(Database,DB)是指长期储存在计算机中的有组织的.可共享的数据集合.数据要按照一定的数据模型组织.描述和存储,具有较小的冗余度.较高的数据独立性,系统易于扩展,并可以被多个用户分享. 数据的三个基本特点: 永久存储 有组织 可共享 2.数据库管理系统(DBMS)是专门用于建立

  • 详解Java中二叉树的基础概念(递归&迭代)

    目录 1.树型结构 1.1概念 1.2概念(重要) 2.二叉树(重点) 2.1概念 2.2二叉树的基本形态 2.3两种特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储 2.6二叉树的基本操作 2.7二叉树的层序遍历 3.二叉树完整代码 1. 树型结构 1.1概念 树是一种 非线性 的数据结构,它是由 n ( n>=0 )个有限结点组成一个具有层次关系的集合. 把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 . 1.2 概念(重要) a.节点的度:该节点子树的个数:如

  • python链表的基础概念和基础用法详解

    本文为大家分享了python链表的基础概念和基础用法,供大家参考,具体内容如下 一.什么是链表 链表是由多个不同的节点组成,每个节点通过指针区域关联到一起链表的头指针,指向了头节点,通过头指针可以找到其他节点信息 二.什么是节点 链表由节点组成,每个节点又包含两个部分,一个是元素区域,一个是指针区域.元素区域存储的是,当前节点的数值,指针区域指向下一个节点的对象.在C语言中,指针应该是指向下一个元素的的内存地址,因python中不研究指针,这里用下一个节点的对象代替.这样我们就能通过指针区域,找

  • Mybatis基础概念与高级应用小结

    目录 Mybatis基础回顾与高级应用 引入依赖 jdbc.properties sqlMapConfig.xml 案例一-查询用户 案例二-添加用户 案例三-编辑用户 案例四-删除用户 传统开发方式 代理开发方式(使用JDK动态代理产生代理对象,由代理对象执行并且操作) 动态sql语句 if标签 Mybatis复杂映射 一对一 一对多 多对多 Mybatis注解开发 Mybatis注解实现复杂映射开发 Mybatis缓存 基础概念 一级缓存 返回结果为 true ;测试一级缓存是默认开启的 返

  • Java数据结构之图的基础概念和数据模型详解

    目录 图的实际应用 图的定义及分类 图的相关术语 图的存储结构 邻接矩阵 邻接表 图的实现 图的API设计 代码实现 图的实际应用 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决. 地图: 我们生活中经常使用的地图,基本上是由城市以及连接城市的道路组成,如果我们把城市看做是一个一个的点,把道路看做是一条一条的连接,那么地图就是我们将要学习的图这种数据结构. 图的定义及分类 定义: 图是由一组顶点和一组能够将两个顶点相连的边组

随机推荐