重载运算符三个const的作用

news/2024/11/8 20:02:49/

const Point operator+(const Point &point) const{

}
尝试去理解const,然后搞懂为什么这里放置const。
const 用于修饰其后面跟着的名字,使其为常量,不可被修改。
1.第一个const 的位置后面是函数返回值类型,表明函数返回的是常量!
2.第二个const 的位置后面是函数参数,表明读取参数时,将其视为常量,保证当传参为const类型时也可接受,否则如果只是接受变量,那么就无法处理+常数的操作。
3.第三个const后面表面看没有东西,其实可以视为缺省了类自身,或者可以认为其修饰的是this指针。那么这里的意义是,使得调用operator+的这个。
大佬的参考链接对象可以是const类型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
笔者运行了第三const的代码后:

#include<bits/stdc++.h>
using namespace std;
struct Point{int x,y;Point(int a,int b):x(a),y(b){};const Point operator+(const Point &tmp){return Point(x+tmp.x,y+tmp.y);}
};
int main(){//freopen("in.txt","r",stdin);const Point p1 = Point(10, 20);Point p2 = Point(20, 30);Point p3 = p1 + p2; // 不加第3个const,这里会报错,因为p1是常数// 注意,这里p1是常量,p2是变量,由于重载了“+”// 上一句代码等同于 p1.operator+(p2);// 由p1调用的operator+函数,因此调用该函数的是个常数。cout<<p3.x<<" "<<p3.y<<endl;return 0;
}

报错信息为:
在这里插入图片描述
这里可以看到,重载运算符函数不匹配“const Point”与“Point”的相加类型,因为如果不加第三个const时,调用此运算符的对象是变量,而在C++中 const object-> 变量是不允许的,因为一旦变为变量,那么就意味着可以修改这个对象的内容,也就违背了const的定义,故报错。
额外知识:C++中变量->const object是允许的,作用范围仅为当前函数内,所以传参时即便加了第二个const,传递变量类型也不会报错。
疑问:
1.如果加了第一个const是否会导致p3无法修改呢?不会,只是p1+p2的返回值是常量类型,但是还有个赋值=操作,赋值之后,p3还是变量。


http://www.ppmy.cn/news/229896.html

相关文章

计算机网络之运输层

三.运输层 3.1 概述和运输层服务 3.1.1 运输层和网络层的关系 在协议栈中&#xff0c;运输层刚好位于网络层之上。网络层提供了主机之间的逻辑通信&#xff0c;而运输层为运行在不同主机上的进程之间提供了逻辑通信。 运输层协议能够提供的服务常常受制于底层网络层协议的服务…

打造无与伦比的题库系统,用 ModStart 模块轻松实现!

寻找一个快速而可靠的方法来建立强大的题库系统吗&#xff1f;不再犹豫&#xff01;ModStart 提供的题库模块为您提供了一个灵活、高效的解决方案&#xff0c;让您轻松搭建出无与伦比的题库系统&#xff0c;无需复杂的编码或数据库设计。 ModStart 是一个先进的模块化开发平台…

罗技蓝牙键盘的顶部功能键F1-F12的原本功能(单击)

单击罗技键盘的功能键时&#xff0c;默认响应的是键盘上面显示的快进、调节音量等功能。改变回F1~F12原本功能&#xff0c;同时按下 fn和esc组合键。

找不到罗技鼠标键盘的接收器头:重新连接配对“对码”教程

2022年12月1日更新&#xff1a;罗技链接又能访问了&#xff0c;访问速度比较慢&#xff0c;需要耐心。 2022年10月23日更新&#xff1a;不知道为什么罗技的链接无法访问了&#xff0c;我自己又丢了一次&#xff0c;找不到配对工具下载网址了。好在之前的老电脑里下载了一个&…

如何安装 罗技“优联技术”无线鼠标、无线键盘?

1、确认已插入 Unifying 接收器&#xff1b; 2、如何您还没有下载 Logitech Unifying 软件&#xff0c;请访问 www.logitech.com/unifying 下载该软件&#xff1b; 3、启动 Logitech Unifying 软件&#xff08;开始 -> 所有程序 -> Logitech -> Unifying -> Logite…

小技巧:罗技一个接收器连接多个鼠标或键盘

安装Logitech Unifying™ 优联软件&#xff1a; 1 只接收器 - 6 个设备 最多可以将六个罗技 Unifying™ 优联无线鼠标或键盘连接至一只小巧又节省空间的 Unifying 优联 USB 接收器。 Unifying Software – Logitech 支持 下载Unifying Software Morehttps://support.logi.c…

Yolov8涨点神器:创新卷积块NCB和创新Transformer 块NTB,助力检测,提升检测精度

🏆🏆🏆🏆🏆🏆Yolov8魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀小目标、遮挡物、难样本性能提升 🍉🍉🍉定期更新不同数据集涨点情况 本博客将具有部署友好机制的强大卷积块和变换块,即NCB和NTB,引入到yolo…

Redis实现分布式锁的原理:常见问题解析及解决方案、源码解析Redisson的使用

0、引言&#xff1a;分布式锁的引出 锁常常用于多线程并发的场景下保证数据的一致性&#xff0c;例如防止超卖、一人一单等场景需求 。通过加锁可以解决在单机情况下安全问题&#xff0c;但是在集群模式下就不行了。集群模式&#xff0c;即部署了多个服务器、并配置了负载均衡后…