文章目录

  • 前言
    • 什么是C++
    • C++的发展史
    • C++的重要性
      • 1. 使用广泛度
      • 2. 工作领域的应用
  • 1. C++关键字(C++98)
  • 2. 命名空间
    • 2.1 命名空间的定义
    • 2.2 命名空间的使用
    • 2.3 std命名空间的使用惯例
  • 3. C++输入&输出
    • 3.1 输入输出
    • 3.2 说明
  • 4. 缺省参数
    • 4.1 缺省参数概念
    • 4.2 缺省参数分类
  • 5. 函数重载
    • 5.1 函数重载概念
    • 5.2 C++支持函数重载的原理--名字修饰
  • 6. 引用
    • 6.1 引用的概念
    • 6.2 引用的特性
    • 6.3 常引用
    • 6.4 使用场景
      • 1. 做参数(传参)
      • 2. 做返回值
    • 6.5 传值、传引用效率比较
      • 1. 值和引用的作为参数的性能比较
      • 2. 值和引用的作为返回值类型的性能比较
    • 6.6 引用和指针的区别
  • 7. 内联函数
    • 7.1 概念
    • 7.2 内联函数的特性
  • 8. auto关键字(C++11)
    • 8.1 类型别名思考
    • 8.2 auto简介
    • 8.3 auto的使用细则
    • 8.4 auto不能推导的场景
  • 9. 基于范围的for循环(C++11)
    • 9.1 范围for的语法
    • 9.2 范围for的使用条件
  • 10. 指针空值nullptr(C++11)

这篇文章开始,我们进入C++的学习。

前言

什么是C++

C语言是结构化和模块化的语言,适合处理较小规模的程序。
对于复杂的问题,规模较大的程序,需要高度的抽象和建模,C语言则不合适。
为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。

1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。
因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++的发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

语言的发展就像是练功打怪升级一样,也是逐步递进,由浅入深的过程。
我们先来看下C++的历史版本:


C++还在不断的向后发展。
但是:现在公司主流使用还是C++98和C++11,所以大家不用追求最新,重点将C++98和C++11掌握好,等工作后,随着对C++理解不断加深,有时间可以去琢磨下更新的特性。

C++的重要性

1. 使用广泛度

下图数据来自TIOBE编程语言社区2021年12月最新的排行榜,在30多年的发展中,C/C++几乎一致稳居前5:

TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜的排名基于互联网上有经验的程序员、 课程和第三方厂商的数量。
排名使用著名的搜索引擎(诸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)进行计算。
注意:排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景。

2. 工作领域的应用

  1. 操作系统及大型系统软件开发

所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的。
比如:Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件。

  1. 服务器端开发

后台开发:主要侧重于业务逻辑的处理,即对于前端的请求,后端给出对应的响应,现在主流采用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、缓存、分布式存储等。
服务器端开发比后台开发更广泛,包含后台开发,一般对实时性要求比较高,比如游戏服务器、流媒体服务器、网络通讯等都是采用C++开发的。

  1. 游戏开发

PC平台几乎所有的游戏都是C++写的。
比如:魔兽世界、传奇、CS、跑跑卡丁车等。
市面上相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。
三维游戏领域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性高,这些高难度需求无疑只能选择C++语言。
比较知名的厂商:腾讯、网易、完美世界、巨人网络等。

  1. 嵌入式和物联网领域

嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,从而能够控制这些装置。
比如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程师、固件开发工程师等。
知名的一些厂商,比如:以华为、vivo、oppo、小米为代表的手机厂;以紫光展锐、乐鑫为代表的芯片厂;大疆、海康威视、大华、CVTE等具有自己终端业务厂商;以及海尔、海信、格力等传统家电行业。
随着5G的普及,物联网(即万物互联,)也成为了一种新兴势力,比如:阿里lot、腾讯lot、京东、百度、美团等都有硬件相关的事业部。

  1. 数字图像处理

数字图像处理中涉及到大量数学矩阵方面的运算,对CPU算力要求比较高,主要的图像处理算法库和开源库等都是C/C++写的,比如:OpenCV、OpenGL等,大名鼎鼎的Photoshop就是C++写的。

  1. 人工智能

一提到人工智能,大家首先想到的可能就是python,认为学习人工智能就要学习python,这个是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据,然后就可以开始训练模型了。
但人工智能背后深度学习算法等核心内容还是用C++写的。

  1. 分布式应用

近年来随着移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发能力才能应对大信息时代的来临。
在分布式领域,好些分布式框架、文件系统、中间组件等都是C++开发的。对分布式计算影响极大的Hadoop生态的几个重量级组件:HDFS、zookeeper、HBase等,也都是基于Google用C++实现的GFS、Chubby、BigTable。包括分布式计算框架MapReduce也是Google先用C++实现了一套之后才有开源的java版本。

除了上述领域外,科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。

接下来,我们正式进入C++的学习。

C++(兼容C)是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。
熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:

  1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数方面、指针方面、宏方面等。
  2. 为后续类和对象学习打基础。

1. C++关键字(C++98)

C++总计63个关键字,C语言32个关键字。

ps:我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。

2. 命名空间

经过上面的了解,我们知道:

C++呢,其实就是之前的大佬感觉C语言存在一些不足,所以在C语言的基础上做了一些改进,并增加了一些新的东西。

那命名空间就是我们的大佬为C语言补的第一个坑:

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。

什么意思呢?举个栗子:

先来创建一个C++的项目:

跟创建C的项目一样,文件后缀CPP我们不要动就行了(创建C项目我们一般修改成.c后缀的)。
ps:.c就调C的编译器,.cpp就调C++的编译器。

那我们写了这样一段代码:

#include <stdio.h>
int rand = 10;int main()
{printf("%d\n", rand);return 0;
}

这是C版的代码,但我们说了C++是兼容C的。
这段代码有什么问题吗?

没有问题,我们打印了一个全局变量,名为rand。

【C→C++】打开C++世界的大门相关推荐

  1. 打开新材料世界的大门:拓扑电子材料目录问世

    来源:知社学术圈 研究背景 拓扑学是纯数学的重要分支,在物理学中有很多应用,比如晶体的拓扑缺陷.二维体系的拓扑相变.量子霍尔效应的拓扑诠释等等.2016年,诺贝尔物理学奖就被授予给在这些方面做出原始创 ...

  2. 打开容器世界的大门: Docker、POD 初探

    随着技术的发展,各种应用变得越来越复杂,开发的压力也与日俱增,速度与质量等等各种要求更是让企业的基础架构.IT 团队及工作流程压力山大. 假设一下,你正在使用笔记本电脑开发应用,并且开发环境有特定配置 ...

  3. Avocado Guild,通过独具特色的P2E打开Web3世界的大门

    伴随着COVID-19的全球化蔓延,全球整体经济下行导致一些经济体系.产业单一的地区,面临着巨大的冲击,经济整体的不景气造成全球失业率飙升,而大量的青年肄业在家难以获得收入.而以Yield Guild ...

  4. 【已完结!】Java基础--学习笔记(零起点打开java世界的大门)--博客汇总表【附:视频、工程源码、资料、详细笔记】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:z ...

  5. 打开单片机世界的大门——上位机控制下位机实例详解

    上位机控制下位机实例详解 一.基本概念 上位机与下位机 串口 数据表达 二.下位机程序 三.上位机程序 四.总结 一.基本概念 在开始讲解前,先来看几个基本概念,如果是有基础的大佬,请直接跳到下一节. ...

  6. 【读书笔记】万物原理——打开客观世界与主观情感的大门

    被尹烨老师推荐种草的,以为是一本讲生命科学的科普书,看上了又以为是说量子物理等高端科学研究的,最后被互补性理论惊到了.这哪里只是一本打开认知客观世界的大门,还让我重识内心.那些看不见摸不着的情感,比如 ...

  7. windowopen怎么不打开新网页_断舍离!闲置物品怎么办?带你打开泰国二手世界新大门!...

    原标题:断舍离!闲置物品怎么办?带你打开泰国二手世界新大门! 编辑/Sunny 据说觉得运势不顺的时候改动身边的东西能引起磁场变化从而改变风水带来好运,最近城主热衷倒腾家装,换了一波家里的家具感觉心情 ...

  8. GMQ稳定币为区块链资产在金融市场的进一步应用打开了一扇大门

    由于区块链资产本身的投机性极大,无法履行记账功能,严重阻碍了其在成为大众流通货币道路上的前行.而"稳定币"的出现大幅解决了这个问题. 从市场交易的角度来看,稳定币能够保证人们以更加 ...

  9. 3dobject用什么打开_第一次用开塞露是什么感觉?网友:像打开了新世界的大门

    第一次用开塞露是什么感觉?网友:像打开了新世界的大门 我妈说我小时候便秘去医院,医生给开了支开塞露,然后在医院的公厕里使用的,我妈的描述是:"要不是我手挪走的快点,就直接喷我手了" ...

最新文章

  1. linux c glob使用(文件路径模式查找函数)
  2. MYSQL--三种锁
  3. ubuntu18.04 ros-melodic 中科大的ROS教程gazebo打开没有地图与环境,只有地板
  4. 2018年 数据挖掘“泰迪杯” C题 第一问
  5. bada开发tips
  6. 购买代购的产品算违法吗——看空姐代购被判刑有感
  7. java gwt_gwt中java与js的相互调用 | 学步园
  8. html的ul和li元素
  9. zookeeper关闭默认管理端口admin.serverPort=8080
  10. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  11. JAVA 操作 excel 并生成 xml
  12. 取消win7共享打印机等需要输入密码
  13. 手机图片中文翻译为英文
  14. 80后失语互联网与互联网的下个十年
  15. Android使用Shape实现简单的三角和圆形等
  16. Charles安装破解
  17. 英文论文中可以借鉴的好词好句
  18. 【传智播客郑州】90后大学生到传智播客郑州校区追梦未来
  19. Asp.Net中几种相似的标记符号: 解释及用法
  20. 聚乙烯醇溶液增稠剂并不是不能澎湃,只是更热衷于沉静

热门文章

  1. mysql zimbra_zimbra的使用与管理
  2. Yolov5 windows下的环境搭建及训练
  3. 《悟透JavaScript》诞生历程精美配乐视频
  4. python自动换壁纸_Python爬取必应每日图片并实现Windows壁纸自动切换
  5. 利用虚拟机安装并配置Debian Linux系统的总结
  6. oracle杀缩表进程,oracle查看锁表和杀死锁表的方法总结
  7. ichunqiu 新春公益赛
  8. android极光推送no bit-32,iOS极光推送详解以及碰到问题和解决方式
  9. win10右键点击桌面图标闪屏,wps卸载
  10. 系统架构设计师 报考指南,考试时间