行业知识
C++初阶入门之函数重载,引用以及一些新语法详细解析
个人主页:���我进入主页
专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
目录
一.前言
二.函数重载
2.1函数重载的类型
2.2函数重载原理
三.引用
3.1引用的基本使用和语法
3.2引用的使用场景
3.2.1参数
3.2.2返回值
3.3引用经常出现的错误
3.4引用和指针的差别和运行比较
3.4.1引用和指针语法上的不同
3.4.2引用和指针在底层上
3.5传引用和传值运行的差别
3.6常引用
3.6.1常引用的写法
3.6.2临时变量具有常性
四.auto关键字
4.1基本使用
4.2不适用的场景
五.新语法
5.1for循环的新写法
5.2空指针的错误
六.总结
一.前言
在前面我们写过关于命名空间和缺省参数的内容,今天我们的内容主要包括函数重载,引用和一些新语法,其中函数重载是应对函数命名冲突所产生的,引用是由于指针太过于麻烦祖师爷对其进行修改,是一种方便高效的新方法,我们的新语法包含auto关键字的使用,for函数在c++11中的新的方式,以及在c++98中一个错误以及在c++11中是如何进行修改的。在这篇文章中我会使用Linux的g++为大家讲解函数重载,这些问题在下面的文章中我会一一为大家解答。
二.函数重载
2.1函数重载的类型
函数重载就是函数的名字相同,但是函数的参数不同,参数不同包括参数个数,参数类型这两类,例如下面的代码:
int Add(int a, int b){return a + b;}double Add(double a, double b){return a + b;} 这里就是函数的参数类型不同,对于下面的代码也是函数的参数类型不同。
double Add(int a, double b){return a + b;}double Add(double a, int b){return a + b;} 接下来的代码属于函数的参数个数不同,代码如下:
double Add(int a, double b){return a + b;}double Add(double a, int b,int c){return a + b + c;} 2.2函数重载原理
为什么会支持函数重载呢?这是如何实现的呢?我们知道一个程序的运行需要经过预处理,编译,汇编,链接这四种,在预处理阶段我们是将头文件展开,宏的替换,条件编译,注释的替换这几部分,在编译阶段是检查语法,将代码转成汇编代码,汇编代码是将汇编代码转为二进制代码,链接是将代码链接,符号表进行合并。我们现在vs中演示一下为什么会有函数重载,我们先看,由于预处理是将头文件展开,宏的替换,条件编译,注释的替换,对于函数重载没有影响,编译阶段,由于编译阶段需要对代码检查语法,所以我们的函数重载和这个有关,我们分三个文件进行代码的编写,第一个文件内容为
#pragma once#includeint Add(int a, int b);int Add(int a, int b, int c);
第二个文件的内容为
int Add(int a, int b){return a + b;}int Add(int a, int b, int c){return a + b + c;} 第三个文件的内容为
#include"test.h"int main(){int ret1 = Add(1, 2);int ret2 = Add(1, 2, 3);return 0;} 我们进入调试然后看看函数的汇编代码:
我们可以看到它是去call这个Add函数,Add后面是函数的地址,我们可以看到第一个Add函数的地址为0X7FF7CFD211C7,第二个Add函数的地址为0X7FF7CFD21208,我们可以看到这个两个函数,在Linux中我们也用这个进行演示,我们看到
所以我们可以看到第一个Add为_Z3Addii第二个Add为_Z3Addiii所以我们可以看到这是两个函数。
我们可以看到它call的是函数名,所以c语言不支持函数重载。
三.引用
3.1引用的基本使用和语法
你还记得我们C语言中的指针吗,还记得被指针支配的痛苦吗?一级指针,二级指针,想想这些是不是还后背发凉,在我们的链表那里我们用到了二级指针,想要写出这些对指针的了解必须深刻,你是不是也感觉指针是非常的难受呢?我们的祖师爷也因为对指针比较烦所以写出了我们引用的这个语法,那引用应该怎末去写呢?让我们看下面的代码:
#includeusing namespace std;int main(){int a = 1;int& b = a;cout
上一篇:为什么充电宝?
下一篇:3100服务器怎么拆?