老九C++零基础学习(十三)内联函数和引用参数

本文介绍了C++中的内联函数,它通过代码复制提高执行效率但占用更多内存。对比了内联函数与预处理器宏的区别。接着讨论了引用的概念,指出引用比指针更安全且使用方便。强调了不应返回局部变量引用的注意事项,并展示了返回引用类型的函数如何直接修改所引用内存的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

13.2 内联函数

简介

相当于把函数内的代码复制到函数调用处执行,提高速度。
(普通函数是根据指针找到函数所在内存空间执行。)
在这里插入图片描述
速度快,但是内存的牺牲比较大。

使用
在这里插入图片描述
前世今生
在c中,用define作“替换”操作:
在这里插入图片描述
好处显而易见,可以输出很多类型。
但是缺点也是很明显的,他实际上是替换,不是真正的函数,所以会有如下的结果:

S(5+10)  // <<==>>  5 + 10 * 5 + 10

所以结果一定不是15*15。

为了解决这个,产生了内联函数。

13.3 引用

引用要比指针安全得多:
存在野指针,可能因为对野指针的误操作而破坏系统文件;
“引用”在定义的时候就需要指向已定义的变量或常量,不存在对系统文件的误操作。
在这里插入图片描述指向常量可以使用const:

const double& ref_double = 12.0;

利用“引用”在函数内改变实参:
在这里插入图片描述
效果跟传入指针是一样的:
在这里插入图片描述
但是在调用的时候,指针需要传入地址,而应用只需要传入变量就可以了:

Swap3(num1, num2);
Swap2(&num1, &num2);

可以看出,引用的方法更为方便和清晰。

注意:如果不想被引用的内容被更改,可以函数声明和定义中在引用前加const。

13.5 返回“引用”

函数返回“引用”类型值,如果引用的是局部变量,那么在函数结束时这块内存会被释放。
这将导致这个变量随时可能被其他操作覆盖,以下举例:
在这里插入图片描述
此时返回正确,因为内存虽然被释放,但是这块内存没有被其他操作覆盖,所以依然为3。
在这里插入图片描述
可以看出,test()函数并没有对get值做任何的修改,但是打印的get值已经发生了改变,
说明sum()函数中的局部变量所在内存已经被test()函数中的变量定义操作覆盖了,get引用的已经不再是sum()函数中局部变量的值,而是覆盖后的值。

总结:不要返回局部变量的引用。

省略return
在这里插入图片描述
如果返回引用型函数中没有return,则会返回最后被操作的变量值。
在这里插入图片描述
上图错误解释,return应该返回已存在内存空间的引用,num1+num2是两块内存空间中值得和,并不能自动生成新的内存空间,所以会报错。

返回引用的函数可以直接修改所引用内存中的值
在这里插入图片描述
可以看出result和sum(num)引用的内存是同一个,所以修改其一,另一个也会改变。
在这里插入图片描述
小结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值