您的位置:首页 > 编程语言 > C语言/C++

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

2014-05-29 09:18 489 查看
引用是已定义的变量的别名(另一个名称),这种变量有什么作用? 其主要用途是用做函数的形参,通过将引用变量作为参数,函数将使用原始数据,而不是其副本

。这样除了指针之外,引用也可以为函数处理大型结构提供了一种非常方便的途径,对于设计类来说这是必不可少的。

引用变量的典型用法

用做别名的时候:

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.如果数据对象是类的对象,则使用引用

当然这是一些知道原则,很有可能有充分的里有做出其他选择
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: