C++引用与const

简介: C++引用与const

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

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

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

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

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

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

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

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

改为 const 修饰就正常了。

相关文章
|
4天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
41 9
|
4天前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
28 0
|
4天前
|
存储 安全 编译器
【C++入门】缺省参数、函数重载与引用(下)
【C++入门】缺省参数、函数重载与引用
|
4天前
|
C++
c++引用是什么意思?
c++引用是什么意思?
6 2
|
4天前
|
C++
c++引用看这个就够了
c++引用看这个就够了
10 0
|
4天前
|
存储 安全 C++
深入理解C++中的指针与引用
深入理解C++中的指针与引用
11 0
|
4天前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
14 2
|
4天前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
4天前
|
安全 编译器 C++
【C++类和对象】const成员函数及流插入提取
【C++类和对象】const成员函数及流插入提取