C++引用与const

发布时间:2023年12月25日

在C/C++ 中,相似类型的隐式类型转换要生成一个临时变量,而临时变量具有常属性,如果这时候再使用一个变量来引用这个具有常属性的临时变量,就会报错,如下:

为什么呢?引用的本质是取别名,隐式类型转化生成的临时变量就有常属性,使用 int 类型的变量对这个临时变量取别名,就会导致权限放大,这是不允许的,如果使用?const 修饰的 int 类型的变量来引用则是没问题的。

字符串隐式类型转化为 string 类型的时候也会出现这种问题

“1234”是字符串,可以隐式类型转化为string对象,但隐式类型转换就会产生一个临时对象,s1引用,不是对 “1234”引用,而是对“1234”产生的临时对象引用,所以就必须加 const 来修饰。

父类引用子类的时候却不会出错,按理来说,Student 类型的 s 赋值给 Person,要先进行隐式类型的转换,生成临时对象,但此处没有加 const 修饰,却也没有报错。

C++对此处进行了处理,p会变成子类对象中父类的那部分的别名,而并不是生成临时对象。?

但是,下面这样就不行了:

?匿名对象本身就是临时对象,也不存在什么特殊规则了

改为 const 修饰就正常了。

文章来源:https://blog.csdn.net/zyb___/article/details/135202554
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。