一、 定义
某个目标变量的“别名”(alias)
int a = 80;
int &pa = a;
常引用: const 类型标识符 &引用名 = 目标变量名;
int a;
const int &ra = a;
ra = 1; //错误
a = 1; //正确
将引用作为函数的返回值类型:
格式:类型标识符 &函数名(形参列表及类型说明){}
二、使用应用时的注意事项:
1. 申明应用时一定要初始化,申明后不能把引用名作为其他变量的别名
2. 不能建立数组的引用
3. 引用型参数在能被定义为const的情况下,尽量定义为const
4. 引用作为函数返回值时,不能返回局部变量的引用;不能返回函数内部new分配的内存引用(返回的引用只是作为临时变量而没有赋值,那么这个引用所指的空间(由new分配)无法释放,造成memory leak)
5. 流操作返回值用引用
6. 一些操作符不能返回引用:+-*/四则运算符(没有side effect,必须构造一个对象作为返回值)
7. 引用是除指针外另一个可以产生多态效果的手段
三、特点:
1. 只是目标变量的一个别名,不是一种数据类型,不占用存储单元。
2. 作为函数参数时,
a. 传递引用与传递指针的效果是一样的,但是指针传递依然需要分配存储单元;
b. 被调函数的形参成为主调函数的实参变量或对象的一个别名;
c. 引用传参时,在内存中没有产生实参的副本,效率和所占空间都比一般变量传递参数好;(使用一般变量传递函数参数,当发生函数调用时,需要给形参分配存储单元,形参是实参变量的副本。如果传递的是对象,还将调用拷贝构造函数)
3. 作为函数返回值:
a. 不产生被返回值的副本(返回局部变量的引用,产生runtime error!);
b. 可以返回类成员的引用,最好是const(引用只是一个变量,类成员与具体对象相关)
阅读(804) | 评论(0) | 转发(0) |