【博客35】初始化引用时,const引用和非const引用的细节

内容: 今天记录下在初始化引用时,有些情况下const引用与非const引用的情况是不一样的。

情况一: 初始化const引用
在这里插入图片描述
情况一分析:可以用非const变量初始化const引用,还可以用常量,甚至是表达式(有求值方法的表达式)来初始化const引用

情况二: 初始化非const引用
在这里插入图片描述
情况二分析:如果用const引用初始化const引用是可以的,用const初始化非const引用是不行的。

情况三: 用其他类型变量初始化const引用
在这里插入图片描述
情况三分析:
此时实际上等同于下面的语句(见c++ primer第五版,const章节)
在这里插入图片描述
此时也是可以的。

情况四: 用其他类型变量初始化非const引用
在这里插入图片描述
情况四分析:这时编译器会报错的,提示你无法用float类型来初始化int&,但是为什么不行呢?编译器不能像上面初始化const引用的时候一样,也生成一个临时的对象,然后转换过来吗?是因为当绑定的不是const引用时,我们是会对这个变量通过引用(也就是他的别名)改变它的值的,但是你绑定的是一个临时变量,把引用绑定到一个临时变量,通过引用来改变一个临时变量的值显然不会是我们的初衷,所以编译器拒绝这么做。如果是const类型的话,并不修改值,而只是一个值的引用而已,则编译器允许这么转换。(见c++ primer 第五版)

注意:
1.对引用而言是初始化,而不是赋值,不存在该引用赋值。
2.常量引用仅对引用可参与的操作进行限定,但是对绑定的对象本身是不是常量没有作出限定,因此对象可能是常量也可能是非常量

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/89640617