前言

引用看起来会很突兀,因为&符号
引用的语法是:数据类型 &变量名称 = 引用对象名称

例如

1
2
int a = 100;
int &b = a;
1
2
//引用之后,我们对b进行的操作,其实都是变相对a进行了操作
b = 200; //那么a的值就会 = 200;

当然引用可以有多个,比如我再新建b1,b2,b3,都可以引用变量a


正文

1
2
3
4
5
6
7
8
9
10
11
12
13
int main(){
int a = 100;
int &b = a;
int &b2 = a;
int &b3 = a;

b3++;

std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << b2 << std::endl;
std::cout << b3 << std::endl;
}

再看看它们的地址:
发现地址一模一样,这样看上去引用好像有点拉跨。

但是放在别的情况下:

1
2
3
4
5
6
7
8
int a[] = {1,2,3,4,5};

for (int x : a){
x += 1;
}
for (int x : a){
std::cout << x << std::endl;
}

这个时候x只是作为一个调用的变量,x的自增,不会改变a的元素,如果把x作为引用:

就能看到a的元素都递增了。

虽然在这个例子中,感受不到引用带来的速度变化,但实际作用中还是很可观的。


引用的小毛病

当一个引用初始化后,又想改变引用的对象了,但是这个对象已经是代表之前引用的对象了

1
2
3
4
int a = 100;
int b = 200;
int &c = &a;
c = b; //这里的c已经是代表a了,c=b,就是相当于a=b,是非常不可取的

在现有手段中,我们知道常量是不可变的。为了保险可以使用const

1
2
3
4
const int a = 100;
const int b = 200;
const int &c = a;
c = b; //这里就会报错了。

结语

初次体验引用还是比较容易接受的。等到和函数混合用的时候或许会上一档次。