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