const关键字与引用

一. 入门:概念引入

1. 变量与引用的关系

定义一个普通 int 类型变量 val ,初始值假设为 10。

1 int val = 10;

再定义一个该变量的引用 val_ref 

1 int &val_ref = val;

引用就是该变量的一个别名,对引用做出的改变,均会体现在原来的变量上。引用可以提高效率,比如避免不必要的复制。但是它也有坏处:可以改变原来的变量内容(有时候你不希望这么做)。

2. const 与变量的关系

上面的变量 val 是可以被改变的,如果希望它不被改变,则需要这么做:

1 const int val = 10;

加上 const 以后,变量 val 成了一个常量,它不允许被改变。在程序运行时,一切改变常量 val 内容的行为,都会被编译器指出。

二. 进阶: const 与引用的关系

我们现在把变量跟它的引用看成一个整体,一一对应。一个变量没有 const ,那么它是一个普通变量,可以被改变;加上 const 以后,它成为了一个常量,不允许被改变。引用也是一样。

这样就产生了如下 4 种情况:

1. 

1 int a = 10;
2 int &a_ref = a;

变量 a 可以被改变,它的引用 a_ref 也可以用于修改变量 a 。这时,对引用的改变会体现在原变量上。

2.

1 const int b = 20;
2 const int &b_ref = b;

常量 b 不能被改变,同时它的引用也不能被用于修改原变量。

3.

1 int c = 30;
2 const int &c_ref = c;

变量 c 可以被改变,但它的引用不能被用于修改原变量。这句话的意思是,允许你修改变量 c 的值,但并不是通过它的引用来修改,你需要选择另外一种途径。

4.

1 const int d = 40;
2 int &d_ref = d;

这种写法是错误的。常量 d 是一个不能被修改的值,但是它的引用却是一个普通 int 类型,这两种类型并不匹配,所以编译器会报错。

原文地址:https://www.cnblogs.com/Hello-Nolan/p/12845326.html