引用、内联函数、auto关键字详解!

1.引用

1.1 什么是引用?

引用就是给一个已经存在的变量取了别名,不会定义新变量,也不会开辟新的空间,它和它引用的变量共用同一块内存空间。
例如:诸葛亮就有“卧龙”的外号,这两个名字指的都是同一个人。

在这里插入图片描述

1.2 引用如何使用?

引用定义的方法:类型& 引用变量名 = 引用实体;
有几个需要注意的点:

1. 这里的类型必须与引用实体类型相同;
2. & 不是取地址符号;
3. 引用变量必须在定义时初始化;
4. 一个变量可以有多个引用;
5. 一个引用只能引用一个实体;

下面的实例中,引用变量b就是变量a的引用(别名)

int main()
{
	int a = 10;
	int& b = a;
	//int& c;    没有初始化,编译时会出错
	return 0;
}

1.3 常引用

概念:引用变量作为一个常量的引用

int main()
{
	const int a = 10;
	//int& b = a; 变量a被const修饰,成为常量,因此int型的引用变量不能作为a的引用
	const int& b = a; //
	//int& c = 10; int型的引用变量不能作为常量的引用
	const int& c = 10;
	return 0;
}

一种特别的常引用:

int main()
{
	double a = 2.22;
	int b = a;
	//int& c = a;
	const int& c = a;
	return 0;
}

在这里插入图片描述

1.4 引用有什么作用?

  • 做参数:
    a.输出型参数
void Swap(int& c, int& d)
{
	int temp = c;
	c = d;
	d = temp;
}
int main()
{
	int a = 1;
	int b = 2;
	Swap(a, b);
	return 0;
}

Swap函数中形参为实参的引用,交换形参相当于直接交换实参,其所代表的内容是相同的。
b. 大对象引用传参,可以节省资源,提高效率。

  • 做返回值
    引用做返回值与普通返回值有什么区别?
    在这里插入图片描述

1.5 引用与指针的区别

引用指针
概念一个变量的别名一个变量的地址
定义时需要初始化不用初始化
sizeof的含义引用类型的大小地址空间所占的字节数(32位占4字节)
访问实体方式编译器处理需要解引用
++的含义引用的实体内容+1指针中存放的地址+1*(类型大小),即指针偏移到了相邻地址处
其他没有空引用有空指针
没有多级引用有多级指针
没有野引用,更加安全有野指针,存在内存泄漏问题
作为一个实体的引用后就不能作为另一个实体的引用可以指向任意的同类型对象

2.内联函数

2.1 为什么要有内联函数?

一个频繁调用的函数,建立栈桢时会有空间和时间的浪费,C++用内联函数来解决这一问题。

2.2 什么是内联函数?

C语言解决一个函数频繁调用的方法是宏函数,但是宏函数不方便调试,复杂易出错。
C++解决方法:inline(内联)函数,不会有压栈开销,减少栈桢,适合于频繁调用的**小(小于10行)**函数。
内联函数会在调用的地方直接展开。

2.3 内联函数怎么用?

inline void Swap(int& c, int& d)
{
	int temp = c;
	c = d;
	d = temp;
}
int main()
{
	int a = 1;
	int b = 2;
	Swap(a, b);   //这里会直接展开上面的代码
}

3.auto关键字(自动推导类型)

使用方法:

int main()
{
	int a = 10;
	auto b = a;
	auto c = "c";
	auto d;   //不能通过编译,auto定义变量时必须初始化
	return 0;
}

auto结合指针、引用的使用:

  • 声明指针类型时,auto 和 auto*都可以使用
  • 声明引用类型时,只能使用auto&
    int a = 10;
	auto* b = &a;
	auto c = &a;
	auto& d = a;

同一行定义多个变量:

  • 该行各个变量的类型必须相同
auto a = 10,b = 3;
auto c = 10,d = 3.0;  //会编译失败,因为c和d的初始化表达式类型不同

注意:

  • auto定义变量时必须进行初始化
  • auto不能作为函数的形参类型
  • auto不能作为数组的类型
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值