今天了解到一个小的知识点,我打算记录下来。
我们知道引用是对一个变量起了一个别名来使用。如下:
可以正常生成解决方案。
上面这种情况是同权限,也就是权限都是可读可写的int类型。
如果不同权限,那么会正常生成方案吗,我们往下看:
很明显编译器报错了,为什么?
这是因为a是可读不可写的const类型,而b却是可读可写的,这里权限进行了放大,所以无法通过。
上述2种情况分别对应了权限相同,权限放大,那么权限缩小行不行,我们来看看:
经过测试,发现权限缩小(可读可写缩小为只可读)也能成功生成解决方案。
总结:权限不能放大
下面再看一个问题:
如果类型不同,也无法正常通过,那么你觉得是为什么呢?可能是因为就是因为类型不同的原因?再看一个例子:
如果我们加上const,又可以正常生成解决方案。
究其原因是因为在类型不同的情况下,会生成一个临时变量,上述例子中,在引用初始化的时候创建了一个临时的double型变量(a的类型提升),但临时变量具有常性,所以如果不加const会把权限放大造成第一种情况错误。