引用一个const对象,必须使用const引用。const引⽤也可以引⽤普通对象,因为对象的访 问权限在引⽤过程中可以缩⼩,但是不能放⼤。
接下来我们来看实例:

以上的ra对于a的引用是属于权限的放大。试想一下,被const修饰的变量a,就相当于一个常量,不可更改,然而ra的类型为int&,这别名ra可以被赋值,从而使得权限发生了放大,引起了一个错误。
下面我们看这样一段代码:
int a=10;
int& rb = a * 3;
double d = 12.34;
int& rd = d;
你可以发现它的问题吗?
首先我们介绍一下什么叫临时对象.
所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。
然后,我们需要知道使用赋值操作符‘=’时,如果右边是一个表达式,则会创建一个临时变量存储这个表达式的值。上面的a*3就是如此。而临时变量具有常性,不可更改,于是就会出现问题。

下面的double类型d的引用与上门类似。把d转化为int类型的引用时,右边的d会生成一个临时变量存储它的值,从而使其具有了常性,因而使得下面两行代码也具有了错误。

1208

被折叠的 条评论
为什么被折叠?



