目录
一、定义
引用是已定义变量的别名,主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。为函数处理大型结构提供了另一种方便的捷径(还有指针)。
二、使用步骤
1.创建引用变量
如下代码,使用&符号用来声明引用,int &ap = a 代表 ap和 a 指向同样的值和内存单元,aP只是a的一个别名。
int main()
{
int a = 5;
int b = 3;
int &aP = a; //aP为a的引用
cout<<a<<endl; //5
cout<<b<<endl; //3
cout<<aP<<endl; //5
int c = 4;
aP = c; // c赋值给aP,由于aP为a的引用,实际时 a = c
cout<<a<<endl; //4
cout<<b<<endl; //3
cout<<aP<<endl; //4
return 0;
}
注意点: 必须在声明引用变量时进行初始化,如 int &ap = a; 不能写成 int &ap; ap = a;
2.引用返回
返回引用的函数实际上是被引用的变量的别名
acct(a,b)= 9,实际等价于 acct(a,b); a = 9;
int & acct(int & a,int & b)
{
a = a + b;
return a; //返回为a 的引用
}
int main()
{
int a = 5;
int b = 3;
cout<<a<<endl; //5
cout<<b<<endl; //3
b = acct(a, b); // 返回a引用
cout<<a<<endl; //8
cout<<b<<endl; //8
acct(a, b) = 9; //返回值为a 的引用,即实际是对a 赋值
cout<<a<<endl; //9
cout<<b<<endl; //8
return 0;
}
注意: 返回引用时需要注意避免返回函数终止时不再存在的内存单元。同时也要避免返回指向临时变量的指针。一般可以返回一个作为参数传递给函数的引用,也可以用new分配新的内存,但一定要记得delete操作。
3.引用参数
引用参数使用的原因:
- 能够修改调用函数的数据对象
- 通过传递引用而不是整个数据对象,可以提高程序的运行速。
参数传递一般选取原则:
不修改调用函数中的数据:
a. 如果数据对象很小,如内置数据类型或小型结构,值传递 |
b. 如果数据对象是数组,使用指针,并将指针声明为指向const的指针 |
c. 如果对象时较大的结构,则使用const指针或const引用,提高程序效率,可以节省复制结果所需的时间和空间 |
d.如果数据时类对象,使用const引用 |
修改调用函数中的数据:
a. 内置数据类型使用指针 |
b. 数组使用指针 |
c. 结构使用指针或引用 |
d. 类对象使用引用 |
总结
本文主要介绍了引用的基本使用,引用主要提高程序效率,可以节省复制结果所需的时间和空间,感觉上它和指针的在用法上不同,但目的相同,在实际应用中还是要根据实际情况选择值传递,指针还是引用。