C++初阶学习第二弹——C++入门(下)

C++入门(上): C++初阶学习第一弹------C++入门(上)-CSDN博客

目录

一、引用

[1.1 引用的实质](#1.1 引用的实质)

[1.2 引用的用法](#1.2 引用的用法)

二、函数重载

三、内敛函数

四、auto关键字

五、总结


前言:

在上面一章我们已经讲解了C++的一些基本语法和命名空间缺省参数的概念,今天这篇,我们将重点讲解C++引用函数重载内敛函数的知识,以及一些其他的有别于c语言的小知识

一、引用

1.1 引用的实质

在我们使用C语言时,遇到一个需要传参的函数时,经常要用到指针这个概念,将一个数据的地址传过去,这样才能在函数中将这个数据进行修改,这个操作是有些繁琐的,在C++中,我们引入了引用的概念,接下来我们就讲解一下引用的用法

引用是对一个变量定义了一个新的名字,而不是定义了一个新的变量,引用的形式就是在一个类型后加一个&

cpp 复制代码
int main()
{
	int a = 10;
	int& b = a;
	cout << a << endl;
	cout << b << endl;
	return 0;
}

运行结果:

如上所示,就可以看出引用的一部分特点,引用的实质实质上就是指针,都是对地址进行操作,上图中的例子,定义出的b和a指向的就是同一个空间,这点可以通过取双方的地址可以看出

cpp 复制代码
int main()
{
	int a = 10;
	int& b = a;
	cout << a << endl;
	cout << b << endl;

	cout << &a << endl;
	cout << &b << endl;
	return 0;
}

运行结果:

也就是说,a和b是指向同一片空间的

1.2 引用的用法

所有就有许多有趣的操作可以进行,例如我们可以用引用来修改原来值,做参数,做返回值等等

先来看一点引用需要注意的点:

  1. 引用在 定义时必须初始化
  2. 一个变量可以有多个引用
  1. 引用一旦引用一个实体,再不能引用其他实体
    1、引用修改原来值
cpp 复制代码
int main()
{
	int a = 10;
	int& b = a;
	b = 20;
	cout << a << endl;
	cout << b << endl;
	return 0;
}

2、引用做参数

cpp 复制代码
void Func(int& b)
{
	b = 20;
}
int main()
{
	int a;
	Func(a);
	cout << a << endl;
	return 0;
}

3、引用做返回值

cpp 复制代码
int& Func()
{
	int a = 10;
	int& b = a;
	return b;
}
int main()
{
	cout << Func() << endl;
	return 0;
}

二、函数重载

C++相比于C语言还有一个很大的创新就是支持函数重载,简单点说就是不同的函数可以有同一个名字,满足下面条件其中一个即可:

1、参数类型不同

cpp 复制代码
int Add(int x, int y);
double Add(double x,double);

2、参数个数不同

cpp 复制代码
int Add(int a, int b);
int Add(int a, int b, int c);

3、参数顺序不同

cpp 复制代码
int Add(int a, double b);
int Add(double a, int b);

其实函数重载的本质就是函数在预处理、编译、汇编、链接这几步中连接这一步进行操作的,因为我们在调用一个函数时是要到符号表中找到该函数的定义的,不同的函数的在汇编中的名字就不同,所以我们就可以对这些名字相同,但是参数有差异的函数在汇编中按一定规则起不同的名字,从而达到让编译器知道该调用哪个函数的目的

应用实例:

cpp 复制代码
int Add(int x, float y)
{
	return x + y;
}
double Add(double x, int y)
{
	return x + y;
}
int main()
{
	int a = 10;
	float b = 20.1;
	cout << Add(a, b) << endl;
	cout << Add(b, a) << endl;
	return 0;
}

运行结果:

三、内敛函数

内敛函数是将函数在在内敛函数调用的地方直接进行展开,不需要再建立栈帧,从而提高了程序的效率,它的使用方法就是在函数的声明和定义前面加一个inline

我们可以借助一下VS观察一下内联函数的展开是什么意思

首先,我们来看一下普通的函数调用是如何进行的,比如:

cpp 复制代码
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int x = 1, y = 2;
	int c = Add(x, y);
	cout << c << endl;
	return 0;
}

而对于内敛函数,则可以在遇到时直接进行展开,不需要再去找Add的位置再去调用它:

cpp 复制代码
inline int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int x = 1, y = 2;
	int c = Add(x, y);
	cout << c << endl;
	return 0;
}

内敛函数的这种用法在很大程度上提高了程序的效率,因为我们在调用这些函数的时候不需要每次都去在栈区开辟空间,但这种用法实质上是以空间换时间,因为我们通过反汇编可以看出,它每一次都在原地进行展开实际上需要更大的空间,所以如果调用的函数过于复杂的时候,就算你写的是一个内敛函数,编译器也不会把它当内联函数对待

四、auto关键字

auto关键字是用来方便我们定义变量的,它的用法就是将一个类型过长或者位置类型的变量通过auto来定义,编译器会根据实际情况自行处理

1、类型过长

cpp 复制代码
std::map<std::string, std::string>::iterator a;
auto b = a;

2、未知类型

cpp 复制代码
auto a;

我们在写代码时恰当的使用auto来定义函数,能够很大程度上简化我们的代码,尤其是类型过长的时候

但我们需要注意:

1、auto不能做函数参数

cpp 复制代码
void Func(auto a)
{    }

2、auto不能直接用来定义数组

cpp 复制代码
void TestAuto()
{
    int a[] = {1,2,3};
    auto b[] = {4,5,6};
}

五、总结

C++的入门知识讲到这里就差不多了,本篇的重点是引用和函数重载,这两个内容在我们后面学习类与对象时会经常用到,强烈建议大家多去学习一下,这些内容并不全,有些知识等我们以后慢慢接触吧,总之,欢迎来到C++的课堂,未来我们一同前行!!!

谢谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!

相关推荐
神奇夜光杯4 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue6 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧8 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
测试界的酸菜鱼19 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
我是谁??19 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
Mephisto.java23 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
晨曦_子画28 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend37 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
发霉的闲鱼1 小时前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc