C++基础概念讲述

作者:一个热爱学习的深度渣渣 时间:2022-10-31 16:56:05 

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

C++基础概念讲述

从图中可以看出,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++基础概念讲述

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

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

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

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

C++基础概念讲述

C++基础概念讲述

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

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

3.3Zero-Overhead Abstraction

主要包含以下两点:

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

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

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

来源:https://blog.csdn.net/weixin_40620310/article/details/121184398

标签:C++,基础,概念
0
投稿

猜你喜欢

  • android动态设置app当前运行语言的方法

    2022-02-21 01:33:37
  • Android viewpager 3D画廊的实现方法

    2021-05-28 21:19:27
  • java jdbc连接和使用详细介绍

    2023-01-13 18:12:52
  • Spring Boot2.X国际化文件编写配置

    2023-02-24 11:34:24
  • c# 如何实现图片压缩

    2022-02-10 00:46:31
  • Java代码实现简单酒店管理系统

    2023-11-21 03:38:57
  • Android常见控件使用详解

    2023-03-11 13:15:23
  • Spring Boot提高开发效率必备工具lombok使用

    2022-05-21 08:22:38
  • Android仿京东搜索框渐变效果

    2022-09-08 19:57:05
  • 使用@Validated 和 BindingResult 遇到的坑及解决

    2022-12-18 20:36:28
  • c#之事件用法

    2023-09-22 05:05:28
  • @RequestBody,@RequestParam和@Param的区别说明

    2023-07-20 06:29:03
  • C#调用易语言写的Dll文件方法

    2023-07-21 01:56:10
  • 使用VS2010 C#开发ActiveX控件(下),完整代码打包下载

    2022-08-20 18:05:29
  • JavaWeb中struts2实现文件上传下载功能实例解析

    2021-11-23 22:53:15
  • c# 抓取Web网页数据分析

    2022-11-10 06:44:57
  • 读取Java文件到byte数组的三种方法(总结)

    2023-08-01 17:19:39
  • 解决Java中由于数据太大自动转换成科学计数法的问题

    2022-01-24 17:31:45
  • 详解SpringBoot使用RedisTemplate操作Redis的5种数据类型

    2022-12-03 07:35:29
  • Android手动检查并申请权限方法

    2023-08-04 23:14:17
  • asp之家 软件编程 m.aspxhome.com