提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、const引用
- 二、指针和引用的关系
- 1.指针和引用的区别
- 2.指针和引用联系
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、const引用
在C++中,const
引用是一种特殊的引用,它指向一个常量,这意味着通过这个引用不能修改它所关联的变量的值。const
引用在函数参数中特别有用,因为它允许你传递对象的引用而不改变原始对象,同时避免对象的复制,这在处理大型对象时可以提高效率。
特点
- 不可修改:
const
引用不能用来修改它所引用的对象。 - 避免复制:使用
const
引用作为函数参数可以避免对象的复制,提高性能。 - 安全性:
const
引用提供了一种安全的方式来访问对象,因为它保证了对象不会被修改。
int main()
{
const int a = 10;
// 编译报错:error C2440: “初始化”: ⽆法从“const int”转换为“int &”
// 这⾥的引⽤是对a访问权限的放⼤
//int& ra = a;
// 这样才可以
const int& ra = a;
// 编译报错:error C3892: “ra”: 不能给常量赋值
//ra++;
// 这⾥的引⽤是对b访问权限的缩⼩
int b = 20;
const int& rb = b;
// 编译报错:error C3892: “rb”: 不能给常量赋值
//rb++;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 10;
const int& ra = 30;
// 编译报错: “初始化”: ⽆法从“int”转换为“int &”
// int& rb = a * 3;
const int& rb = a*3;
double d = 12.34;
// 编译报错:“初始化”: ⽆法从“double”转换为“int &”
// int& rd = d;
const int& rd = d;
return 0;
}
二、指针和引用的关系
C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功
能有重叠性,但是各有⾃⼰的特点,互相不可替代。
• 语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
• 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
• 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
• 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
• sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下
占4个字节,64位下是8byte)
• 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。
1.指针和引用的区别
int a = 10;
int b = 20;// 指针
int* ptr = &a; // ptr 指向 a
*ptr = 30; // 通过解引用修改 a 的值
ptr = &b; // ptr 现在指向 b// 引用
int& ref = a; // ref 是 a 的引用
ref = 40; // 通过引用修改 a 的值
// ref = b; // 错误:引用不能改变引用的对象const int c = 50;
const int& cref = c; // 常量引用
// cref = 60; // 错误:不能通过常量引用修改数据
2.指针和引用联系
指针和引用在C++中都是用于访问和操作内存中的数据,它们之间存在一些联系和相似之处:
-
内存地址:指针和引用都与内存地址有关。指针存储的是对象的内存地址,而引用则是对象的别名,也与对象的内存地址相关联。
-
间接访问:通过指针或引用都可以实现对数据的间接访问。指针通过解引用操作符
*
来访问其指向的数据,而引用直接访问数据,不需要解引用。 -
作为函数参数:指针和引用都可以作为函数参数,用于传递对象的地址,避免对象的复制,提高函数调用的效率。
-
与
const
一起使用:指针和引用都可以与const
关键字一起使用,以限制指针或引用所指向或引用的数据的修改。 -
数组和函数参数:在数组名作为函数参数时,数组名会被转换为指向数组首元素的指针。引用也可以用于数组,但通常用于单个对象的引用。
-
返回值:指针和引用都可以作为函数的返回值,用于返回对象的地址或引用。
-
自增操作:指针支持自增操作(
++ptr
),这会改变指针的值,指向下一个内存地址。引用不支持自增操作,因为它们必须始终引用同一个对象。 -
初始化:指针和引用在定义时都需要初始化。指针可以被初始化为
nullptr
,而引用在定义时必须绑定到一个有效的对象。 -
类型转换:指针和引用都可以进行类型转换,但引用的类型转换通常更简单,因为它们不需要显式地进行类型转换。
-
与表达式一起使用:指针和引用都可以用于表达式中,如比较表达式、赋值表达式等。
尽管指针和引用有上述联系,但它们在C++中扮演着不同的角色,并且有各自的特点和用途。引用提供了一种更安全、更直观的方式来访问和操作数据,而指针则提供了更大的灵活性和控制力。在实际编程中,选择使用指针还是引用取决于具体的应用场景和需求。
总结
解释
要是形参不加const,传参的时候会受限制,不灵活,const引用权限缩小可以传参方便