首页 > 学院 > 开发设计 > 正文

C++之引用变量

2019-11-14 09:29:37
字体:
来源:转载
供稿:网友

引用是定义变量的别名:

int rats;

int & rodents = rats;

则rodents是rats的别名,他们的值和地址都相同,操作rodents和操作rats一样。注意在声明引用时必需将其初始化,不能拆开先声明再赋值。以上引用声明实际上时如下代码的伪装表示:

int * const PR = &rats;

引用变量的主要途径时用作函数的形参,函数将使用原始数据,而不是其副本。同指针一样,引用也为函数处理大型结构和类提供方便途径。确实,引入引用主要是为了这些类型的,而不是用于基本的内置类型。

比较以下三个函数头,体会引用作为函数参数的作用:

void swap_1(int & a, int & b);//即用a、b作为参数的引用

void swap_2(int * p, int * q);

void swap_3(int a, int b);

另一种情况,如果意图让程序只是用参数值而不修改,又想用引用作为参数,则应该使用常量引用:

double refcube (const double & ra);

目前,对于形参为const引用的C++函数,如果实参不匹配,其行为将类似于值传递,使用临时变量储存值而确保原始数据不被修改。

总结起来,应尽可能将引用声明为const:

1、避免无意中修改数据;

2、能处理const和非const实参,否则只能接收非const数据;

3、能够正确生成并使用临时变量。

引用主要用于结构和类,虽然有些时候也能使用值传递实现,但与复制原始结构的拷贝相比,使用引用更节省时间和内存。不仅作为参数,还可以作为返回值。返回值,从概念上说,这个值被复制到一个临时位置,然后调用程序使用这个值。相比把整个结构复制到一个临时位置,使用引用作为返回值,效率更高。

返回引用时最重要的一点是hi,避免返回函数终止时不复存在的内存单元引用。如下:

const free_throws & clone ( free_throws & ft)

{

free_throws newguy;

newguy = ft;

return newguy;

}

返回时,相当于free_throws & tmp = newguy;然而函数调用完后,newguy释放,其别名(而不是值拷贝)tmp也没了。避免的最简单方法是,返回一个作为参数传递给函数的引用。

总之,不要返回局部对象的引用;同理,不要返回指向局部变量的指针。

为避免对返回的引用赋值而被修改,因此最好将const应用于返回值。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表