C++引用与const

简介: C++引用与const

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

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

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

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

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

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

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

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

改为 const 修饰就正常了。

相关文章
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
160 2
|
8月前
|
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
54 3
|
8月前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
9月前
|
C++
C++引用
C++引用
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
87 5
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等