C++基础概念讲述

 更新时间:2022年01月24日 16:41:55   作者:一个热爱学习的深度渣渣  
这篇文章主要介绍了C++基础概念,​ 本次为C++的一个开篇,重点是更好的理解C++相对于其他编程语言的一个特性,之后会持续更新,本次专栏计划是掌握C++的基础语法以及常用特性,并且从细节上去理解,需要的朋友可以参考一下

首先,通过一张最新(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++基础概念内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现哈夫曼编码

    C语言实现哈夫曼编码

    这篇文章主要为大家详细介绍了C语言实现哈夫曼编码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++超集C++/CLI模块的基本用法

    C++超集C++/CLI模块的基本用法

    这篇文章介绍了C++超集C++/CLI模块的基本用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C++ Boost shared_ptr共享指针详细讲解

    C++ Boost shared_ptr共享指针详细讲解

    shared_ptr是一个标准的共享所有权的智能指针,允许多个指针指向同一个对象,定义在memory文件中,命名空间为std,这篇文章主要介绍了C++ shared_ptr使用,需要的朋友可以参考下
    2022-11-11
  • 基于Qt实现SVG图片浏览器

    基于Qt实现SVG图片浏览器

    SVG的英文全称是Scalable Vector Graphics,即可缩放的矢量图形。本文将用Qt6制作一个简单的SVG图片浏览器,感兴趣的可以尝试一下
    2022-06-06
  • 用C语言实现通讯录

    用C语言实现通讯录

    这篇文章主要为大家详细介绍了用C语言实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Visual Studio Code 从简介、安装到配置所需插件详细介绍

    Visual Studio Code 从简介、安装到配置所需插件详细介绍

    这篇文章给大家介绍到vs与vs code的区别,并且会详细介绍vscode的安装步骤,和我所了解过的插件配置,感兴趣的朋友跟随小编一起看看吧
    2020-03-03
  • C++实现简单FTP客户端软件开发

    C++实现简单FTP客户端软件开发

    这篇文章主要为大家详细介绍了C++实现简单FTP客户端软件开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++实现俄罗斯方块游戏

    C++实现俄罗斯方块游戏

    这篇文章主要为大家详细介绍了C++实现俄罗斯方块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • C语言之结构体定义 typedef struct 用法详解和用法小结

    C语言之结构体定义 typedef struct 用法详解和用法小结

    这篇文章主要介绍了C语言的结构体定义typedef struct用法详解和用法小结,typedef是类型定义,typedef struct 是为了使用这个结构体方便,感兴趣的同学可以参考阅读
    2023-03-03
  • 文件编译时出现multiple definition of ''xxxxxx''的具体解决方法

    文件编译时出现multiple definition of ''xxxxxx''的具体解决方法

    以下是对文件编译时出现multiple definition of 'xxxxxx'的解决方法进行了详细的分析介绍,如也遇到此问题的朋友们可以过来参考下
    2013-07-07

最新评论