c++ 关于引用&的一些知识

本文深入探讨了C++中引用的概念及其应用,包括如何用作别名、形参以及返回值等,对比了引用与指针的区别,并介绍了使用引用提高程序效率的技巧。

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

引用是已定义的变量的别名(另一个名称),这种变量有什么作用? 其主要用途是用做函数的形参,通过将引用变量作为参数,函数将使用原始数据,而不是其副本
。这样除了指针之外,引用也可以为函数处理大型结构提供了一种非常方便的途径,对于设计类来说这是必不可少的。




引用变量的典型用法
用做别名的时候:
 int rats=100;
 int &rodents=rats 
 这样就可以通过rodent来操作rats的代表的数据
 rodents++;
 rats会变为101


 也许有人会觉得这和指针很像或者说是指针的另一种
 引用和指针的差别
 引用在声明时必须初始化
 int rat;
 int &rodent;
 rodent=rat;//这是错的


 其实引用更接近const指针,必须在创建是初始化,一旦与某个变量关联起来,就将一直效忠于它
 int &rodents = rats;
 int* const pr=rats


 用做形参的时候:
 void swapr(int &a,int &b)
 {
int temp;
temp=a;
a=b;
b=temp;
 }
 int main()
 {
int a=3;
int b=4;
swapr(a,b);
cout<<a<<" "<<b<<endl;
return 0;
 }
 输出的结果会是 4  3 
 因为传递引用变量函数将直接操作原始数据
 即通过引用变量来操作内存中的数据
 而没有生成新的变量来存放参数的值
 通过引用变量往往可以达到返回多个参数的效果
 double re(double &i)
 {
i++;
return i;
 }
 临时变量、引用参数
 考虑下面的代码
 double side=3.0;
 double *pd=&side;
 double &rd=side;
 long edge=5L;
 double lens[4]={2.0,5.0,10.0,12.0}
 double c1=re(side);
 double c2=re(lens[2]);
 double c3=re(rd);
 double c4=re(*pd);
 double c5=re(edge);// 将会产生临时变量,函数结束释放
 double c6=re(lens);//将会产生临时变量,函数结束释放
 double c7=re(side+7.0)//将会产生临时变量,函数结束释放


 为什么会这样呢?edga虽然是变量,类型却不正确,lens 同上,side+7 类型正确但是没有名称,在这些情况下
 ,编译器都会生成一个临时匿名变量,让形参指向它。这临时变量会随着函数的结束释放
 
 如果接受引用的参数的意图是修改作为参数传递的变量,则创建临时变量将阻止这个意图的实现。
 解决方法是,禁止创建临时变量


 2.为何有些函数要返回引用
  传统返回机制于按值传递函数参数类似:计算关键return 后面的表达式,并将结果返回给调用函数。
  返回一个引用而不是返回一个结构或者类的好处是,返回类或者结构将把整个结构复制到一个临时位置,再将
  这个拷贝到接受返回数据的变量指向的空间。但返回值是引用的时候,直接把变量指向的地址赋值为函数返回
  的地址,其效率更高






  返回引用是需要注意的问题
  返回引用最重要的一点是,应避免返回函数终止时不再存在内存单元引用。即不可以返回临时变量,因为临时变量在
  函数结束时会自动释放。
  为避免这种问题:
  最简单的方法是,返回一个作为参数传递给函数的引用。
structs &name(struts &target,const structs &soure)
{
code.......
return target;
}
另一种方法是用new来分配新的存储空间
string & cstr()
{
string *str=new string("15"); 
return *str;
}


使用引用参数的主要原因有两个
1.程序员能够修改调用函数中的数据对象
2.通过传递引用而不是整个数据对象,可以提高程序运行速度
当然指针也能达到这种效果,那么什么时候用指针什么时候用引用呢?
对于使用传递的值而不做修改的函数
1.如果数据对象很小,如果内置数据或小型结构,则按值传递。
2.如果数据的对象是数组,则用指针,因为这是唯一的选择,并将指针声明为指向const的指针
3.如果市局对象是较大的结构,则使用const指针或者const引用,可以提高程序的效率,也可以
节省复制结构所需的空间
4,如果数据是对象类,则使用const引用.类的设计的语义常常要求使用引用,这是c++新增这项特性(引用)
的主要原因
对用修改函数中数据的函数
1.如果数据是内置数据类型,则用指针。
2.如果数据是数组,则只能用指针
3.如果对象是结构,则使用引用或指针
4.如果数据对象是类的对象,则使用引用

当然这是一些知道原则,很有可能有充分的里有做出其他选择




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值