一、引用
1、引用是给一个变量起别名,没有自己独立的空间,要与它所引用的变量共享空间。对引用所做的改变实际上就是对它所引用的变量做改变
2、定义引用的一般格式:
类型 &引用名 = 变量名;
例如:
int a = 1; int &b = a; //b是a的别名,因此a和b是同一个单元
注意! 定义引用时一定要初始化,指明该引用变量是谁的别名。引用一经初始化,不能重新指向其他变量
在实际的应用中,引用一般用作参数传递与返回值
二、const引用
const引用是指向const对象的引用(也可以指向非const对象)
const int ival = 1024; const int& ref1 = ival; //合法 int& ref2 = ival; //非法
三、引用传递
1、引用传递方式是在函数定义时在形参前面加上 &
如:
swap(int& a, int& b);
2、按值传递的方式容易理解,但形参值的改变不能对实参产生影响
3、地址传递方式通过形参的改变使相应的实参改变,但程序容易产生错误且难以阅读
4、引用作为参数对形参的任何操作都能改变相应的实参数据,又使得函数调用方便、自然
四、引用作为函数返回值
1、函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边
2、不能返回对局部变量或者自动化变量的引用
五、引用与指针的区别
1、引用访问一个变量是直接访问,而指针是间接访问
2、引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间
3、引用一经初始化,不能重新指向其他变量,而指针可以(只要不是const指针)
4、C++中尽可能使用引用,不得已时使用指针
- 原因在于
- 值传递中,实参要初始化形参且要分配空间,将实参内容拷贝到形参,涉及类时要考虑拷贝构造函数
- 引用传递中,实参初始化形参时不分配空间,效率更高
- 指针传递中,本质仍是值传递,实参初始化形参也要分配4字节空间(对于32位系统,64位系统为8字节)如果要修改指针的地址,单纯用指针传递是不行的,只能修改指针所指向变量的内容,除非使用指针的指针 **或者指针引用 *&