引用变量一

来源:互联网 发布:起点源码 编辑:程序博客网 时间:2024/05/29 02:30

c++新增了一个复合类型-引用变量。引用是已经定义的变量的别名(另一个名称)。引用的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。

1.创建引用变量

c和c++使用&符号来表示变量的地址,c++给&符号赋予了另一个含义,将其用来声明引用变量。例如,将rodents用作变量rats的别名,可以这样做:

int rats;int & rodents=rats;

其中,int & 指的是指向int的引用,上述声明将rats和rodents互换,他们指向的是同一个地址处的同一个变量。

2.引用的初始化

必须在声明引用时将其初始化,而不能像指针一样,先声明,再赋值。例如,

int rats;int & rodents;rodents=rats;   //invalid不合法

3.将引用用作函数参数

引用常被用作函数参数,使得函数中的参数成为调用程序中变量的别名,这种传递参数的方式叫做按引用传递。这是c++新增的特性,是对c语言的超越。下面是一个简单地交换两个变量值的程序:

#include <iostream>using namespace std;void swapr(double & x,double & y);int main(){    double a,b;    cout<<"输入两个数:\n";    cin>>a>>b;    cout<<"a= "<<a<<","<<"b= "<<b<<endl;    cout<<"交换两个数:\n";    swapr(a,b);    cout<<"Now,a= "<<a<<","<<"b= "<<b<<endl;    return 0;}void swapr(double & x,double & y){    double temp;    temp=x;    x=y;    y=temp;}

结果
这里写图片描述

4.引用的属性和特别之处

1.例如以下函数:

double cube(double & a){    a*=a*a;    return a;}

输入x=3;则程序运行的结果为27=cube(x);但是注意的是此时,x的值也是27,我们的本意是不修改x的值,如果是按值传递,那么x的值还是3,我们运用的是x的副本。

如果,程序员的意图是让函数使用传递给它的信息,而不对这些信息进行修改,同时又想使用引用,则应使用常量引用。即在此函数中,函数头和函数原型中使用const:double cube(const double & a)。这样做编译器一旦发现代码修改了a的值,将生成错误信息。

2.临时变量、引用参数和const

如果实参和引用参数不匹配,c++将生成临时变量,并让引用指向这个临时变量,当前仅当引用参数为const引用时,c++才会这样做。

  • 什么时候生成临时变量?①实参的类型正确,但不是左值;②实参的类型不正确,但可以转换为正确的类型。

总之,应尽可能地使用const引用。