C++引用与const

简介: C++引用与const

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

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

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

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

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

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

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

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

改为 const 修饰就正常了。

相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
75 1
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
32 3
|
4月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5
|
5月前
|
C++
C++引用
C++引用
|
5月前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
37 5
|
5月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
5月前
|
安全 测试技术 C++
C++中的引用
C++中的引用
29 1
|
5月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
42 2