正确使用C++引用做返回值和参数

本文详细阐述了C++中引用的基本概念、特性及其应用场景,包括引用作为函数参数、返回值和与多态、类指针的关系。通过实例解析,帮助开发者掌握引用的高效用法。

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

一、引用基本概念及语法

          引用熟称别名,二者完全等价

          例子:int a = 10; int &b = a;  a = 20;  cout<<“a="<<a<<"  b="<<b<<endl; 

          解释:b为a的引用,b与a共享一块存储单元(牢记这一点),因此对a操作等效于对b操作,上述执行后,b的值也变为20

二、引用的一些特性

          1)声明引用必须同时初始化(皮之不存毛将焉附)

          2)一个变量可以有多个引用(张三,你可以叫他小张,小三,猫蛋,狗蛋;实际上,代码中极少有给变量声明引用的情况,毫无意义)

          3)特别重申:引用与原对象占同一块存储单元(这使得使用引用不会做内存拷贝,效率高,同时使用也得注意)

三、引用的使用场景

          使用引用,主要是为了代码提高效率,因为二者占同一块内存,不用拷贝

          1)引用作为函数参数传入

                声明:void  function1 (int  &a) // 作用:提高效率,且函数内改变形参 a 的值对实参有效

                使用:int  a = 10;  function1 (a); //注意传入没有 & 运算符

                常引用声明:void function2 (const int &a); //作用:提高效率,且保证函数不会修改实参的值,提高代码的安全性

          2)引用作为函数返回值

                声明:int & function(...) //作用:提高效率,返回的对象不用拷贝(不使用引用,会拷贝副本,将副本返回)

                使用:int a;  a = function(...);

                使用场景:重载操作符 +=, -=, *=, /= 等,因为这些运算返回后赋值给自身,自身”赋值“给自身,使用引用天造地设

                class A{...};

                A& operotor ++() ; //前置++,这也是推荐使用前置++的原因

                A& operator --(); //前置--

                A& operator +=(const A&);

                A& operator -=(const A&); 

                A& operator *=(const A&);

                A& operator /=(const A&);

               注意事项:禁止将函数中的临时变量作为引用返回(临时变量在函数返回后即被释放,由于二者占用同一块内存,故返回的值将随之失效)

               例如:int &function() {int a=10; return a;}; // a 会在函数返回后被释放

               3)引用与多态,类似于指针

                     class Parent{...};

                     class Child:  public Parent{...};

                     Child c;

                     Parent &p = c;

                     Parent *p2 = &c; //个人感觉指针更灵活,可以改变指向的对象,方便类型转换, 例如 p2 = (Child *)p2; 这时 p2 就可以访问子类的所有成员


总之,记住引用和被引用的对象占用同一块内存,不用拷贝,效率高,二者同生共死,使用的时候注意了,记住这点就知道什么场合该使用引用

参考文章:运算符重载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值