一、基本用法
创建一个对象的引用只需把声明符写成&val
的形式即可:
1 2 |
int iVal = 1024; int &refVal = iVal; |
创建引用时,编译器并不是把拷贝一个值赋给引用,而是把引用和初始的对象绑定在一起,相当于只是给对象起了一个别名。可以通过引用来操作初始化对象,并且通过引用来操作对象时,相当于直接对对象进行了操作。
1 2 3 4 5 6 7 8 9 10 11 12 |
#include<iostream> using namespace std; int main() { int iVal = 1024; int &refVal = iVal; printf("%d %d ", iVal, refVal); // 1024 1024 refVal += 1; printf("%d %d ", iVal, refVal); // 1025 1025 } |
以引用作为函数的形参时,在函数内部改变形参的值,函数外部变量的值也会改变:
1 2 3 4 5 6 7 8 9 10 |
void add(int &x) { x += 1; } int main(){ int iVal = 1024; add(iVal); printf("%d ", iVal); // 1025 } |
可以用引用给引用赋值
,实际上就是把引用绑定的对象作为初始值:
1 2 |
int iVal = 10; int &refVal = iVal, &refVal2 = refVal; |
二、注意事项
1 引用必须初始化
因为引用只是和对象绑定在一起了,而不是拷贝值,一旦初始化完成,引用将永远和初始对象绑定在一起。所以引用在使用时必须初始化,并且引用不能重新赋值。
1 2 3 4 |
int iVal = 1, iVal2 = 2; int &refVal = iVal; int &refVal2; //错 refVal = iVal2; //错 |
2 不能使用引用的引用
引用本身不是一个对象,所以不能定义引用的引用
3 引用对象的类型必须匹配
引用对象的数据类型必须和初始化对象严格匹配。
1 2 |
int iVal = 1024; double &x = iVal; //错误 |
4 不能使用字面量初始化引用类型
引用类型的初始值必须是一个对象,不能为一个字面量。
1 |
int &refVal = 10; //错误 |
评论