文章概述
- 常量引用的定义
- 常量引用初始化以及分析常量引用
常量引用的定义
a. 常量引用 : 将引用绑定到const对象上(其实就是对const的引用)。
//常量引用的格式:const int &a。
const int & a = 10;
b. 常量引用表示不能通过引用改变绑定对象的值,但是对象的值可以通过别的方式改变。
int a = 10;
//常量引用b和a绑定,不能通过b而改变a。
const int &b = a;
cout << a << endl;
cout << b << endl;
//但是可以通过别的方式改变a
a = 20;
cout << a << endl;
cout << b << endl;
(上面的代码也反映了生活中有些事不是你以为一直不变的,它有可能已经改变了)
c. 引用的类型必须与其绑定的对象类型一致,但是常量引用的初始化时个特例。常量引用允许用任意的表达式作为初始值,只要这个表达式可以转化为常量引用的类型。我们分析一下这种例外情况为什么可以?看下面的代码:
double dval = 3.14;
const int& a= dval;
a是常量引用,并且引用的对象应该是int类型的。但是dval是double类型的。因此为了确保a绑定的是整数,编译器把上面的代码变成一下形式:
const int b = dval;
const int&a =b;
其实,关键在于编译器生成了一个临时变量b,常量引用绑定的是临时变量b。