c++引用学习


引用就是起别名。别名与本身名共享同一内存。

引用注意:

1、不能返回局部变量的引用(由于局部变量引用调用完后,内存会销毁,返回一个空指针情况)
2、如果函数返回值是引用,那么函数的调用可以作为左值
3、引用本质就是一个指针常量
(指针常量:int *const p 指向不可改变
常量指针: const int *p 指向值不可改变)
4、一级指针引用可以替代二级指针

常量引用

1、使用场景,修饰形参为只读,尤其是拷贝构造函数 (常用引用即是const int *const p)
2、const int &a =10 会分配内存
3、引用不产生新的变量,减少形参与实参传递时的开销(指向引用的变量)
4、由于引用可能导致实参随形参的改变而改变,将其定义为常量引用可以消除这种副作用(指向引用的变量,并不是在重新赋值一份产生局部变量。看下面与值传递区别)
5、如果希望实参随着形参改变而改变,那么使用一般的引用;
如果不希望实参随着形参的改,那么使用常引用(实际是const int *const p 即只读)。

值传递与引用传递区别

1、值传递是在调用时,将实参值传给形参。由于形参有自己独立的存储空间,又作为函数的局部变量使用,因此在函数中对任何形参值得修改都不会改变实参变量的值。(实际上是将实参复制一份给形参,而形参又是局部变量,有自己的栈内存空间,加大了内存开销)(如果传数据很大,溢出栈区内存,会崩掉)

2、引用传递是一种特殊的变量,它被认为是一个变量的别名。当定义一个引用时,其实是为目标变量起一个别名,引用并不分配独立的内存空间,它与目标变量公用其内存空间(实质上是引用指向该变量,说白了就是指向该变量的内存还是存在的,),当定义一个引用时,如果该引用不是用作函数的参数或者返回值,则必须提供该引用的初始值。(即必须提供引用的目标变量名)(达到链式编程效果)

说明:
1、使用引用参数可以直接操作实参变量,从而能够实现通过修改形参的值而达到修改对应实参值得目的。
2、当引用作为函数形参,其引用的目标变量没人为调用该函数时对应的实参变量名,所以,在定义函数时,对于引用类型参数不必提供引用的初始值

1、值传递:拷贝一份互不影响变量.
2、形参指针:拷贝一份指针,影响值,而不影响指针地址。
3、形参引用:不拷贝任何东西,值、地址都影响,且可以隐式返回多个返回值。
4、当传递一个很大内存,需要很大内存开销都考虑不拷贝情况(即引用使用)。
5、当函数内不考虑改变形参的内容时,使用CONST常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值