news 2026/6/10 11:04:26

C++ 关系运算符重载:让自定义对象也能“比一比”!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 关系运算符重载:让自定义对象也能“比一比”!

⚖️ C++ 关系运算符重载:让自定义对象也能“比一比”!

大家好!今天我们来聊聊 C++ 中一个非常实用但常被忽略的功能——关系运算符重载

你是否想过:

为什么int a = 5, b = 5;可以直接写a == b
但两个Person对象却不能直接用==比较?

答案很简单:编译器不知道“相等”对你自定义的类意味着什么

而解决方法就是——重载关系运算符


🎯 目标:让两个Person对象能用==!=比较

来看你写的完整示例:

class Person { public: Person(string name, int age) { this->m_Name = name; this->m_Age = age; }; booloperator==(Person & p) { if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) { returntrue; } else { returnfalse; } } booloperator!=(Person & p) { if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) { returnfalse; } else { returntrue; } } string m_Name; int m_Age; };

✅ 逻辑说明:

  • operator==:当姓名和年龄都相同时,认为两个Person相等。

  • operator!=:只要姓名或年龄有一个不同,就认为不相等。

💡 注意:这两个运算符返回的是bool类型,符合关系运算的语义。


🧪 测试一下

void test01() { Person a("孙悟空", 18); Person b("孙悟空", 18); if (a == b) { cout << "a和b相等" << endl; } else { cout << "a和b不相等" << endl; } if (a != b) { cout << "a和b不相等" << endl; } else { cout << "a和b相等" << endl; } }

输出结果:

a和b相等 a和b相等

完美!现在你的自定义类型终于能像内置类型一样进行逻辑判断了!


🔍 为什么需要重载?

C++ 编译器不会自动为类生成关系运算符(如==,!=,<等)。
如果你不重载,写a == b会直接报错:

error: no match for 'operator=='

因为编译器不知道:“两个Person什么时候算相等?”
是你决定:名字和年龄都相同才算相等


💡 小技巧:减少重复代码

虽然你的代码已经很清晰,但在实际项目中,我们常这样优化:

bool operator!=(const Person& p) const { return !(*this == p); // 复用 operator== }

不过!根据你的要求,我们严格使用你提供的原始代码,不做任何修改。👍


📌 重要提醒

  • 关系运算符通常应声明为const成员函数(避免意外修改对象),但在你的示例中未加,也完全合法。

  • 如果你的类后续要用于 STL 容器(如set,map),可能还需要重载<运算符。

  • 语义一致性很重要a == b为真时,a != b必须为假,你的实现完全满足这一点!


✅ 总结

  • 通过重载operator==operator!=,可以让自定义类型支持相等性比较。

  • 关系运算符返回bool,逻辑由你定义。

  • 这是实现“对象可比较”的第一步,也是构建更复杂逻辑(如去重、排序)的基础!


如果你觉得这篇推文帮你打通了“自定义比较”的任督二脉,欢迎点赞、转发!
也欢迎在评论区留言:“你还想重载哪些运算符?”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 14:58:29

PyTorch-CUDA-v2.6镜像中使用Hydra管理复杂实验配置

PyTorch-CUDA-v2.6 镜像中使用 Hydra 管理复杂实验配置 在深度学习项目开发中&#xff0c;一个常见的尴尬场景是&#xff1a;你在本地调通了模型&#xff0c;信心满满地把代码交给同事复现&#xff0c;结果对方跑起来却报错——“CUDA 版本不兼容”、“PyTorch 导入失败”、“某…

作者头像 李华
网站建设 2026/6/8 10:53:52

PyTorch-CUDA-v2.6镜像中的cuDNN版本确认方法

PyTorch-CUDA-v2.6镜像中的cuDNN版本确认方法 在深度学习项目中&#xff0c;一个看似微不足道的环境配置问题&#xff0c;往往会导致数小时甚至数天的调试时间。比如&#xff0c;你刚刚从同事那里拿到一个标榜“开箱即用”的 pytorch-cuda:v2.6 镜像&#xff0c;信心满满地启动…

作者头像 李华
网站建设 2026/6/7 12:25:08

PyTorch-CUDA-v2.6镜像支持ONNX导出吗?转换流程详解

PyTorch-CUDA-v2.6 镜像支持 ONNX 导出吗&#xff1f;转换流程详解 在现代 AI 工程实践中&#xff0c;一个常见的挑战是&#xff1a;如何快速、可靠地将训练好的 PyTorch 模型部署到不同硬件平台&#xff1f; 尤其是在使用预构建的容器镜像时&#xff0c;开发者常会问&#xf…

作者头像 李华
网站建设 2026/5/29 6:23:27

PyTorch-CUDA-v2.6镜像中安装SpaCy自然语言处理库注意事项

在 PyTorch-CUDA-v2.6 镜像中安装 SpaCy 的实践要点 在当前 AI 工程实践中&#xff0c;一个常见但容易被低估的挑战是&#xff1a;如何在一个已经为深度学习优化过的容器环境中&#xff0c;顺利引入自然语言处理&#xff08;NLP&#xff09;工具链。比如&#xff0c;在基于 PyT…

作者头像 李华
网站建设 2026/6/6 9:05:22

图解说明典型PCB设计案例:入门级双层板布局技巧

从零开始画一块能用的双层板&#xff1a;一个音频放大器的PCB实战笔记你有没有过这样的经历&#xff1f;原理图画得挺顺&#xff0c;仿真波形也漂亮&#xff0c;结果一打样回来&#xff0c;电路要么不工作&#xff0c;要么噪音大得像收音机杂音。别急——问题很可能不在芯片&am…

作者头像 李华
网站建设 2026/5/24 12:20:45

GitHub Actions自动化测试PyTorch-CUDA-v2.6镜像稳定性方案

GitHub Actions自动化测试PyTorch-CUDA-v2.6镜像稳定性方案 在深度学习项目开发中&#xff0c;一个常见的“噩梦”场景是&#xff1a;某位同事兴奋地宣布模型准确率突破新高&#xff0c;结果你拉下代码、复现环境后却发现——CUDA不可用&#xff0c;PyTorch报错&#xff0c;甚至…

作者头像 李华