理解:C++重载运算符等于(=)时为什么返回的是一个引用(&)(&引用是什么意思)?_c++ 运算符=重载 为什么返回引用-程序员宅基地

技术标签: C++  c++  this  重载运算符等于号(=)  指针  引用传递  

首先,我们要理解,引用(&)是什么意思?

&在c语言中可以是取地址的意思。
但在C++中,它有另外一种用法,即引用,这是在C++中特有的,对引用最通俗简单的理解就是取别名!我们做个简单尝试,看以下代码。

#include<iostream>
using namespace std;
int main
{
    
	int a=3;
	int &b=a;
	cout<<b;    //输出 3;
	b=1;     //这条语句其实就相当于语句a=1;
	cout<<a<<endl;  //输出1      (验证了上面的猜想)
	
	/*继续尝试/
	cout<<&a<<endl;   //注意哦,这里的&是取地址。 在我的电脑上结果输出008FFE48 这个地址
	cout<<&b<<endl;   //在我的电脑上输出也是008FFE48
	return 0;
}

//取地址时具体是什么地址不重要,重要的是可以看到结论a和b的地址是一样的!嘿嘿。
通过上面的尝试,我们得出了一个重要结论,引用(&)本质上就是取别名,对于 int& b=a 而言,b是对a的一个引用, 只要把对b所进行的所有操作想象成对a进行的所有操作就就行了。

其次,我们来理解在C++中重载运算符+时为什么返回的是引用(&);

class A{
    
public:
	int a;
	A& operator+(A c) {
    
		this->a= c.a;
		return *this;
	}
}

上面是类A。
1.在讲解引用之前,容许我讲解一下this的意思。
①对于代码中的类A,如果创建出一个对象 A p1, 那么在A内部,this指针是指向p1这个对象的,比如说this->a,其实指的就是p1里面的成员数据a,所以记住this就是指向目前所在对象的一个指针。(为什么要引出this这个东西呢,这就是第二点要讲的了)
②我们看到上面的代码中的重载运算符+的函数中返回了this,由①知this是一个指针指向p1,是解引用的意思,所以this就指的是p1,比如说*this.a指的也是p1中的数据成员a。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45313931/article/details/114789699

智能推荐

Debezium系列之第100篇文章:阶段性详细总结对Debezium使用方式的优化,详细介绍对Debezium集群和Kafka集群做的一系列优化_debezium oracle kafka配置优化-程序员宅基地

文章浏览阅读681次。Debezium系列之第100篇文章:阶段性详细总结对Debezium使用方式的优化,同时优化Kafka集群和Debezium集群_debezium oracle kafka配置优化

旷视产品营销总监吕盟:构建AIoT时代的城市智慧|量子位沙龙回顾-程序员宅基地

文章浏览阅读465次。4月10日,量子位与中关村壹号联合主办的AI+线下沙龙—智慧城市的发展趋势与挑战在中关村壹号举办。旷视产品营销总监吕盟、明略科技COO兼数字城市发展部总经理唐日新、思必驰..._产品营销总监

Java并发编程 - 第三章 Java内存模型_数据依赖分为-程序员宅基地

文章浏览阅读1.3w次。前言:Java 线程之间的通信对程序员完全透明,内存可见性问题很容易困扰 Java 程序员,本章将揭开 Java 内存模型神秘的面纱。一、Java 内存模型的基础1.1 并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息_数据依赖分为

sync___fast_iob-程序员宅基地

文章浏览阅读4.6k次。1. linux下sync命令在busybox-1.14.3中sync命令相关代码非常简单,int sync_main(int argc, char **argv UNUSED_PARAM){ /* coreutils-6.9 compat */ bb_warn_ignoring_args(argc - 1);___fast_iob

python pandas常用函数_python:pandas常用功能函数操作-程序员宅基地

文章浏览阅读306次。一、安装pandas创建虚拟环境:#创建虚拟环境mkvirtualenv -p python3 pandas_env#进入虚拟环境workon pandas_env安装pandas# 1、安装包$ pip install pandas测试# 2、进入python的交互式界面$ python -i# 3、使用Pandas>>> import pandas as pd>>..._print(df)

基于UDS的CAN通信故障诊断_汽车故障诊断是利用ecu监测控制系统各组成部分的工作情况,发现故障后自动启动故障-程序员宅基地

文章浏览阅读9.6k次,点赞16次,收藏89次。摘要:阐述一种诊断控制单元之间通信丢失故障的机制,通过基于UDS的诊断协议进行原理分析,并制定一种有效的诊断处理策略。 汽车故障诊断是利用ECU监测控制系统各组成部分的工作情况,发现故障后自动启动故障记录和处理逻辑。汽车故障诊断模块不仅能够存储记忆汽车故障,还能够实时提供汽车各种运行参数川。外部诊断设备通过一定的诊断通信规则与ECU建立诊断通信,并读取这些故障和参数,同时解析出来供外部测..._汽车故障诊断是利用ecu监测控制系统各组成部分的工作情况,发现故障后自动启动故障

随便推点

CodeForces入门-程序员宅基地

文章浏览阅读5.1k次,点赞2次,收藏17次。codeforces的正确打开方式https://www.cnblogs.com/muzu/p/7616746.html1.背景可能很多人都久闻codeforces网站的大名,却苦于各种各样的区域性问题或玄学问题,没能真正地体验到cf所带来的极致魅力而网络上关于这方面的博文太少了(至少我没找到过),于是就写了这样的一篇博文2.关于codeforces...

algorithm头文件函数全集——史上最全,最贴心-程序员宅基地

文章浏览阅读7.3w次,点赞816次,收藏3.7k次。  不知大家可否遇到这种情况:一道题想出思路后,一般都习惯性的百度一下有没有“现成的函数”可以调用,往往收获不菲,增长很多奇奇怪怪的知识。而这些“现成的函数”大部分都来自于algorithm头文件。简直是我等懒癌的福音啊!  当然,也有很多朋友喜欢自己写函数。因人而异吧,哈哈  为了更方便、易懂, 笔者将每个函数的用法都注释在了代码中,想要验证或加深印象直接复制到编译器里就可以运行。代码:..._algorithm头文件

眼底视网膜血管增强方法(四)Frangi滤波_3d frangi参数-程序员宅基地

文章浏览阅读1.1w次,点赞6次,收藏55次。眼底视网膜血管增强方法(四)Frangi滤波Frangi1滤波是Frangi在1998年,运算Hessian矩阵的特征值构造出了一种滤波器来增强血管结构。Hessian矩阵实际是一个二阶偏导矩阵,矩阵的特征向量在图像边缘检测方面有着重要的作用。_3d frangi参数

java用while循环设计轮询线程的性能问题-程序员宅基地

文章浏览阅读644次。java用while循环设计轮询线程的性能问题 java用while循环设计轮询线程的性能问题 轮询线程在开发过程中的应用是比较广泛的,在这我模拟一个场景,有一个队列和轮询线程,主线程往队列中入队消息,轮询线程循环从队列中读取消息并打印消息内容。有点类似Android中Handler发送消息。首先定义一个Message类。public cla..._java 轮训查询 不影响主线程降低子线程

ROS: Cannot mix incompatible Qt library (version 0x50905) with this library (version 0x50c01)-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏3次。错误开始尝试使用rosrun turtlesim turtlesim_node运行ROS的入门样例时,出现这样的错误:Cannot mix incompatible Qt library (version 0x50905) with this library (version 0x50c01) Aborted (core dumped)根据提示可以判断是QT的版本不兼容导致的错误,百度知道查看当前QT版本:$ qmake -vQMake version 2.01aUsing Qt version _cannot mix incompatible qt library (version 0x50905) with this library (vers

Objective-C程序设计 第6版_objectc程序设计百度云-程序员宅基地

文章浏览阅读1.4k次。Objective-C程序设计 第6版,原版,完整版本,下载后大家给点帮助,谢谢! 百度网盘地址: http://pan.baidu.com/s/1numGurZ 密码: b47e_objectc程序设计百度云

推荐文章

热门文章

相关标签