欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > C++(6)—引用的详解②

C++(6)—引用的详解②

2024/12/26 3:58:53 来源:https://blog.csdn.net/weixin_54114700/article/details/144676548  浏览:    关键词:C++(6)—引用的详解②

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、const引用
  • 二、指针和引用的关系
    • 1.指针和引用的区别
    • 2.指针和引用联系
  • 总结

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、const引用

在C++中,const引用是一种特殊的引用,它指向一个常量,这意味着通过这个引用不能修改它所关联的变量的值。const引用在函数参数中特别有用,因为它允许你传递对象的引用而不改变原始对象,同时避免对象的复制,这在处理大型对象时可以提高效率。

特点

  1. 不可修改const引用不能用来修改它所引用的对象。
  2. 避免复制:使用const引用作为函数参数可以避免对象的复制,提高性能。
  3. 安全性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++中都是用于访问和操作内存中的数据,它们之间存在一些联系和相似之处:

  1. 内存地址:指针和引用都与内存地址有关。指针存储的是对象的内存地址,而引用则是对象的别名,也与对象的内存地址相关联。

  2. 间接访问:通过指针或引用都可以实现对数据的间接访问。指针通过解引用操作符*来访问其指向的数据,而引用直接访问数据,不需要解引用。

  3. 作为函数参数:指针和引用都可以作为函数参数,用于传递对象的地址,避免对象的复制,提高函数调用的效率。

  4. const一起使用:指针和引用都可以与const关键字一起使用,以限制指针或引用所指向或引用的数据的修改。

  5. 数组和函数参数:在数组名作为函数参数时,数组名会被转换为指向数组首元素的指针。引用也可以用于数组,但通常用于单个对象的引用。

  6. 返回值:指针和引用都可以作为函数的返回值,用于返回对象的地址或引用。

  7. 自增操作:指针支持自增操作(++ptr),这会改变指针的值,指向下一个内存地址。引用不支持自增操作,因为它们必须始终引用同一个对象。

  8. 初始化:指针和引用在定义时都需要初始化。指针可以被初始化为nullptr,而引用在定义时必须绑定到一个有效的对象。

  9. 类型转换:指针和引用都可以进行类型转换,但引用的类型转换通常更简单,因为它们不需要显式地进行类型转换。

  10. 与表达式一起使用:指针和引用都可以用于表达式中,如比较表达式、赋值表达式等。

尽管指针和引用有上述联系,但它们在C++中扮演着不同的角色,并且有各自的特点和用途。引用提供了一种更安全、更直观的方式来访问和操作数据,而指针则提供了更大的灵活性和控制力。在实际编程中,选择使用指针还是引用取决于具体的应用场景和需求。


总结

                                                         

        解释    

    要是形参不加const,传参的时候会受限制,不灵活,const引用权限缩小可以传参方便

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com