一、基本用法

创建一个对象的引用只需把声明符写成&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;  //错误
最后修改:2017 年 12 月 04 日
如果觉得我的文章对你有用,请随意赞赏